FindFirstFile()
и FindNextFile()
- это специфичные для Windows методы для выполнения того, что вы хотите ...
В следующей адаптации в этом примере я прокомментировал, где могут работать найденные имена файлов. (то есть имя изменено, открыто / отредактировано и т. д.) Ищите «/// сделайте свою работу здесь ...».
Введите путь к каталогу в командной строке, например C:\\dir1\\dir2
, и он найдет все файлы в этом месте.
Обратите внимание, что эта адаптация удаляет некоторые из бессмысленных методов Microsoft для копирования и объединения строк.
#define MAX_PATHNAME_LEN 260
int main(int argc, char *argv[])
{
WIN32_FIND_DATA FindFileData;
HANDLE hFind = INVALID_HANDLE_VALUE;
DWORD dwError;
char DirSpec[MAX_PATHNAME_LEN];
size_t length_of_arg;
// Check for command-line parameter; otherwise, print usage.
if(argc != 2)
{
printf("Usage: Test <dir>\n");
return 2;
}
// Check that the input is not larger than allowed.
length_of_arg = strlen(argv[1]);
if (length_of_arg > (MAX_PATHNAME_LEN - 2))
{
printf("Input directory is too large.\n");
return 3;
}
printf ("Target directory is %s.\n", argv[1]);
// Prepare string for use with FindFile functions. First,
// copy the string to a buffer, then append '\*' to the
// directory name.
sprintf(DirSpec, "%s\\*", argv[1]);
// Find the first file in the directory.
hFind = FindFirstFile(DirSpec, &FindFileData);
if (hFind == INVALID_HANDLE_VALUE)
{
printf ("Invalid file handle. Error is %u.\n", GetLastError());
return (-1);
}
else
{
printf ("First file name is %s.\n", FindFileData.cFileName); "/// do your work here..."
// List all the other files in the directory.
while (FindNextFile(hFind, &FindFileData) != 0)
{
printf ("Next file name is %s.\n", FindFileData.cFileName); "/// do your work here..."
}
dwError = GetLastError();
FindClose(hFind);
if (dwError != ERROR_NO_MORE_FILES)
{
printf ("FindNextFile error. Error is %u.\n", dwError);
return (-1);
}
}
return (0);
}