Вы ищете DeleteFile()
, например:
#include <windows.h>
#include <Shlwapi.h>
#include <iostream>
#include <string>
#include <vector>
#pragma comment(lib, "shlwapi.lib");
void GetFolderListing(std::string directory, const std::string &fileFilter, std::vector<std::string> *subfolders, std::vector<std::string> *files)
{
if (!directory.empty() && (*directory.rbegin() != '\\'))
directory += "\\";
std::string filter = directory;
if (subfolders)
filter += "*";
else
filter += fileFilter;
WIN32_FIND_DATAA FindFileData;
HANDLE hFind;
DWORD dwError;
hFind = FindFirstFileA(filter.c_str(), &FindFileData);
if (hFind == INVALID_HANDLE_VALUE)
{
dwError = GetLastError();
if (dwError != ERROR_FILE_NOT_FOUND)
std::cout << "FindFirstFile error " << dwError << std::endl;
return;
}
do
{
if (FindFileData.dwFileAttributes & FILE_ATTRIBUTE_DIRECTORY)
{
if ((subfolders) &&
(lstrcmpA(FindFileData.cFileName, ".") != 0) &&
(lstrcmpA(FindFileData.cFileName, "..") != 0))
{
subfolders->push_back(directory + FindFileData.cFileName);
}
}
else
{
if ((files) &&
((!subfolders) || PathMatchSpecA(FindFileData.cFileName, fileFilter.c_str())))
{
files->push_back(directory + FindFileData.cFileName);
}
}
}
while (FindNextFileA(hFind, &FindFileData));
dwError = GetLastError();
FindClose(hFind);
if (dwError != ERROR_NO_MORE_FILES)
std::cout << "FindNextFile error " << dwError << std::endl;
}
void DeleteFiles(const std::string &directory, const std::string &fileFilter, bool recursively = true)
{
std::vector<std::string> folders;
std::vector<std::string> files;
GetFolderListing(directory, fileFilter, (recursively) ? &folders : NULL, &files);
for (std::vector<std::string>::iterator iter = files.begin(); iter != files.end(); ++iter)
DeleteFileA(iter->c_str());
if (recursively)
{
for (std::vector<std::string>::iterator iter = folders.begin(); iter != folders.end(); ++iter)
DeleteFiles(*iter, fileFilter, true);
}
}
int main(int argc, char* argv[])
{
DeleteFiles("c:\\", "*.do");
}
Или, используя Unicode (которые вы должны использовать вместо ANSI):
#include <windows.h>
#include <Shlwapi.h>
#include <iostream>
#include <string>
#include <vector>
#pragma comment(lib, "shlwapi.lib");
void GetFolderListing(std::wstring directory, const std::wstring &fileFilter, std::vector<std::wstring> *subfolders, std::vector<std::wstring> *files)
{
if (!directory.empty() && (*directory.rbegin() != L'\\'))
directory += L"\\";
std::wstring filter = directory;
if (subfolders)
filter += L"*";
else
filter += fileFilter;
WIN32_FIND_DATAW FindFileData;
HANDLE hFind;
DWORD dwError;
hFind = FindFirstFileW(filter.c_str(), &FindFileData);
if (hFind == INVALID_HANDLE_VALUE)
{
dwError = GetLastError();
if (dwError != ERROR_FILE_NOT_FOUND)
std::cout << "FindFirstFile error " << dwError << std::endl;
return;
}
do
{
if (FindFileData.dwFileAttributes & FILE_ATTRIBUTE_DIRECTORY)
{
if ((subfolders) &&
(lstrcmpW(FindFileData.cFileName, L".") != 0) &&
(lstrcmpW(FindFileData.cFileName, L"..") != 0))
{
subfolders->push_back(directory + FindFileData.cFileName);
}
}
else
{
if ((files) &&
((!subfolders) || PathMatchSpecW(FindFileData.cFileName, fileFilter.c_str())))
{
files->push_back(directory + FindFileData.cFileName);
}
}
}
while (FindNextFileW(hFind, &FindFileData));
dwError = GetLastError();
FindClose(hFind);
if (dwError != ERROR_NO_MORE_FILES)
std::cout << "FindNextFile error " << dwError << std::endl;
}
void DeleteFiles(const std::wstring &directory, const std::wstring &fileFilter, bool recursively = true)
{
std::vector<std::wstring> folders;
std::vector<std::wstring> files;
GetFolderListing(directory, fileFilter, (recursively) ? &folders : NULL, &files);
for (std::vector<std::wstring>::iterator iter = files.begin(); iter != files.end(); ++iter)
DeleteFileW(iter->c_str());
if (recursively)
{
for (std::vector<std::wstring>::iterator iter = folders.begin(); iter != folders.end(); ++iter)
DeleteFiles(*iter, fileFilter, true);
}
}
int wmain(int argc, wchar_t* argv[])
{
DeleteFiles(L"c:\\", L"*.do");
}
C = C++. Ваш вопрос о том или ином. Они не являются одним и тем же языком, и теги не являются синонимами. Тэги актуальны здесь - используйте ** только ** теги, которые действительно применимы к вашему вопросу. –
Его вопрос о C++. «C» в теме - это диск, а не язык. – user31264