Поиск файлов и изменение атрибутов.
Следующий пример копирует все текстовые файлы
из текущей директории в новую директорию с
именем \TEXTRO. При необходимости, файлам в новой
директории присваивается атрибут "только
чтение".
Директория \TEXTRO создаётся функцией CreateDirectory.
Поиск всех файлов .TXT в текущей директории
производится функциями FindFirstFile
и FindNextFile.
Каждый файл .TXT копируется в директорию \TEXTRO.
После того, как файл скопирован, функция GetFileAttributes
проверяет, является ли файл только для чтения.
Если аттрибута "только чтение" у файла не
установлено, то приложение устанавливает этот
атрибут функцией SetFileAttributes.
После того, как все файлы .TXT из текущей
директории были скопированы, то хэндл поиска
закрывается функцией FindClose.
#include <windows.h>
#include <stdio.h>
WIN32_FIND_DATA FileData;
HANDLE hSearch;
DWORD dwAttrs;
char szDirPath[] = "c:\\TEXTRO\\";
char szNewPath[MAX_PATH];
char szHome[MAX_PATH];
BOOL fFinished = FALSE;
// Создаём новую директорию.
if (!CreateDirectory(szDirPath, NULL))
{
printf("Couldn't create new directory.");
return;
}
// Начинаем поиск файлов .TXT в текущей директории.
hSearch = FindFirstFile("*.txt", &FileData);
if (hSearch == INVALID_HANDLE_VALUE)
{
printf("No .TXT files found.");
return;
}
// Копируем каждый файл .TXT в новую директорию и изменяем его
// атрибут на "только чтение", если он уже не установлен.
while (!fFinished)
{
lstrcpy(szNewPath, szDirPath);
lstrcat(szNewPath, FileData.cFileName);
if (CopyFile(FileData.cFileName, szNewPath, FALSE))
{
dwAttrs = GetFileAttributes(FileData.cFileName);
if (!(dwAttrs & FILE_ATTRIBUTE_READONLY))
{
SetFileAttributes(szNewPath,
dwAttrs | FILE_ATTRIBUTE_READONLY);
}
}
else
{
printf("Couldn't copy file.");
return;
}
if (!FindNextFile(hSearch, &FileData))
{
if (GetLastError() == ERROR_NO_MORE_FILES)
{
MessageBox(hwnd, "No more .TXT files.",
"Search completed.", MB_OK);
fFinished = TRUE;
}
else
{
printf("Couldn't find next file.");
return;
}
}
}
// Закрываем хэндл поиска.
FindClose(hSearch);
|