Следующий пример копирует все текстовые файлы из текущей директории в новую директорию с именем \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); |