HANDLE CreateFile (
LPCTSTR FileName, // имя файла
DWORD Access, // тип доступа к файла
DWORD Sharing, // тип разделения файла
LPSECURITY_ATTRIBUTES Attrib, // указатель на описатель защиты
DWORD CreationDistr,
// что делать, когда файл существует
DWORD Flags, // флаги и атрибуты файла
HANDLE Template);
// дескриптор файла, чьи атрибуты могут быть скопированы
Для получения информации о конкретном файле используется функция
BOOL GetFileInformationByHandle (
HANDLE File, // дескриптор файла
LPBY_HANDLE_FILE_INFORMATION);
// описатель структуры с информацией о файле
За чтение из файла и запись в файл отвечают следующие две функции.
BOOL ReadFile (
HANDLE File, // дескриптор файла
LPVOID Buf, // адрес буфера, в котором хранятся данные из файла
DWORD BytesToRead, // сколько байтов прочитать
LPDWORD BytesRead, // сколько байтов прочитано
LPOVERLAPPED Overlap); // перекрываемый ввод-вывод
BOOL WriteFile (
HANDLE File, // дескриптор файла
LPVOID Buf,
// адрес буфера, в котором хранятся данные для записи
DWORD BytesToWrite, // сколько байтов записать
LPDWORD BytesWriten, // сколько байтов прочитано
LPOVERLAPPED Overlap); // перекрываемый ввод-вывод
Следующий фрагмент кода демонстрирует копирование файла File.txt в файл Output.txt.
HANDLE In, Out;
In = CreateFile (“File. txt”, GENERIC_READ, 0, NULL,
OPEN_EXISTING, 0, NULL);
Out = CreateFile (“Output. txt”, GENERIC_WRITE, 0, NULL,
CREATE_ALLWAYS, FILE_ATTRIBUTE_NORMAL, NULL);
BOOL Finished;
do {
Finished = ReadFile (In, Buffer, BufferSize, &NumOfRead,
NULL);
if (Finished && NumOfRead > 0)
WriteFile (Out, Buffer, NumOfRead, &NumOfWriten, NULL);
} while (Finished > 0 && NumOfRead > 0);
CloseHandle (In);
CloseHandle (Out);
Аналогичные действия обеспечиваются функцией
BOOL CopyFile(
LPCTSTR ExistingFileName, // Имя файла-источника
LPCTSTR NewFileName, // Имя файла-получателя
BOOL bFailIfExists); // Действия, если файл уже существует
Пример использования.
CopyFile(“c:\\oldfile. exe”, “c:\\newfile. exe”, FALSE);
Аналогично выглядит переименование файла, а также его удаление.
BOOL MoveFile(
LPCTSTR ExistingFileName, // Имя файла-источника
LPCTSTR NewFileName); // Имя файла-получателя
BOOL DeleteFile(
LPCTSTR ExistingFileName); // Имя файла-источника
Пример использования.
MoveFile(“c:\\tmp\\oldfile. txt”, “c:\\newfile. txt”);
DeleteFile (“c:\\tmp\\oldfile. txt”);
Для выполнения еще одной полезной файловой операции, а именно перемещения внутри файла принято использовать функцию
DWORD SetFilePointer(
HANDLE File, // Дескриптор открытого файла
LONG BytesToMove, // Количество байтов, на которые надо перейти
PLONG DistanceToMoveHigh,
// Количество байтов, на которое произошел переход
DWORD dwMoveMethod); //С какой позиции двигаться
Пример использования этой функции.
SetFilePointer (File, BytesToRead, 0,FILE_BEGIN);
Новый каталог создается, а пустой уничтожается функциями
BOOL CreateDirectory (
LPCTSTR PathName, // имя каталога
LPSECURITY_ATTRIBUTES lpSecurityAttributes);
// атрибуты безопасности
BOOL RemoveDirectory (
LPCTSTR lpPathName); // имя каталога
Пример использования одной из них.
if (RemoveDirectory("c:\\new")) printf ("каталог удален\n");
Следующие две функции дают возможность получить информацию о текущем каталоге и изменить текущий каталог. Ниже расположен пример их использования.
DWORD GetCurrentDirectory (
DWORD BufferLength, // размер буфера с именем каталога
LPTSTR Buffer); // указатель на буфер с именем каталога
BOOL SetCurrentDirectory (
LPCTSTR PathName); // имя каталога
GetCurrentDirectory (sizeof (buffer), buffer);
printf (“%s\n”, buffer);
SetCurrentDirectory ("D:\\");
GetCurrentDirectory (sizeof (buffer), buffer);
printf (“%s\n”, buffer);
Для поиска файлов используются две функции. Первая функция начинает поиск:
HANDLE FindFirstFile (
LPCTSTR FileName, // какой файл ищется, можно указывать маску
LPWIN32_FIND_DATA FindData);
// указатель на структуру с информацией
Для продолжения поиска используется функция:
BOOL FindNextFile (
HANDLE FindFile, // что искать
LPWIN32_FIND_DATA FindData); // структура с информацией
Пример их использования
WIN32_FIND_DATA FindData;
HANDLE MyFile;
MyFile = FindFirstFile ("d:\\*.*", &FindData);
if (MyFile!= INVALID_HANDLE_VALUE) {
do {
printf (“%s\n”, FindData. cFileName;
} while (FindNextFile (MyFile, &FindData));
FindClose (MyFile);
}
Функция FindClose завершает поиск файла. Она описана так.
BOOL FindClose (
HANDLE FindFile); // какой поиск закончить
Варианты заданий к лабораторной работе №7
Вариант №1
Разработать программу, которая позволяет удалять из каталога, указанного пользователем только те файлы, которые не соответствуют указанной пользователем маске.
Вариант №2
Разработать программу, которая позволяет переименовывать файлы следующим образом. Все буквы русского алфавита из имени файла заменяются на буквы английского алфавита и наоборот. Имя файла указывается пользователем. Заменяются только короткие имена.
Вариант №3
Разработать программу, которая позволяет инвертировать содержимое и имя файла, указанного пользователем. Под инвертированием понимается запись строки в обратном порядке. Инвертируются только короткие имена файлов.
Вариант №4
Разработать программу, которая позволяет двум каталогам, указанным пользователем, обменяться содержимым, то есть подкаталогами и файлами.
Вариант №5
Разработать программу, которая позволяет переименовывать файлы следующим образом. Все строчные символы в имени файла заменяются на прописные и наоборот. Имя файла указывается пользователем. Заменяются только короткие имена.
Вариант №6
Разработать программу, которая позволяет перемещать файлы из текущего каталога во вновь создаваемые программой подкаталоги. Короткие имена этих подкаталогов должны быть эквивалентны расширениям перемещаемых файлов.
Вариант №7
Разработать программу, которая позволяет удалять каталоги, содержащие файлы. Имя каталога указывается пользователем.
Вариант №8
Разработать программу, которая удаляет из каталога, указанного пользователем, все пустые файлы.
Вариант №9
Разработать программу, которая перемещает все файлы в указанный пользователем каталог все файлы из его подкаталогов.
Вариант №10
Некоторые файловые системы могут поддерживать версии файлов.
Однако, в ОС семейства Windows этого не предусмотрено. Необходимо разработать программу, которая позволяла бы добавлять номер версии к короткому имени файла через символ подчеркивания. Например, при появлении очередной версии для файла f_1.txt должен быть создан файл f_2.txt.
Содержимое файлов может просто копироваться.
Учесть ограничения на длину имени файла и диапазон значений для чисел.
Вариант №11
Некоторые файловые системы могут поддерживать версии файлов.
Однако, в ОС семейства Windows этого не предусмотрено. Необходимо разработать программу, которая позволяла бы добавлять номер версии к короткому имени файла через символ подчеркивания. Например, при появлении 29.02.04г. очередной версии для файла f_22062003.txt может быть создан файл f_29022004.txt. Содержимое файлов может просто копироваться.
Учесть ограничения на длину имени файла и диапазон дат.
Вариант №12
Некоторые файловые системы могут поддерживать версии файлов.
Однако, в ОС семейства Windows этого не предусмотрено. Необходимо разработать программу, которая позволяла бы добавлять номер версии к короткому имени файла через символ подчеркивания. Например, при появлении в 10ч.25мин.32сек. очередной версии для файла f_020304.txt может быть создан файл f_102532.txt. Содержимое файлов может просто копироваться.
Учесть ограничения на длину имени файла и формат времени.
Вариант №13
Разработать программу, которая позволяет перемещать содержимое файлов, указанных пользователем, в один файл, имя которого также указывается пользователем.
Учесть ограничения на длину имени файла и набор разрешенных символов.
Вариант №14
Разработать программу, которая позволяет копировать содержимое файлов, указанных пользователем, в один файл, имя которого также указывается пользователем.
Учесть ограничения на длину имени файла и набор разрешенных символов.
Вариант №15
Разработать программу, которая выводит список файлов из указанного пользователем каталога. Данный список должен быть отсортирован по времени создания каждого его элемента – файла.
Вариант №16
Разработать программу, которая выводит список файлов из указанного пользователем каталога. Данный список должен быть отсортирован по времени модификации каждого его элемента – файла.
Вариант №17
Разработать программу, которая выводит список файлов из указанного пользователем каталога. Данный список должен быть отсортирован по времени последнего доступа к каждому его элементу – файлу.
Вариант №18
Разработать программу, которая выводит список файлов из указанного пользователем каталога. Данный список должен быть отсортирован по размеру каждого его элемента – файла.
Вариант №19
Разработать программу, которая выводит список файлов из указанного пользователем каталога. Данный список должен быть отсортирован по имени (без расширения) каждого его элемента – файла.
Вариант №20
Разработать программу, которая выводит список файлов из указанного пользователем каталога. Данный список должен быть отсортирован по расширению имени каждого его элемента – файла.
Вариант №21
Разработать программу, которая выводит список файлов из указанного пользователем каталога. В данном списке не должны показываться элементы, чей размер меньше указанного пользователем значения.
Вариант №22
Разработать программу, которая выводит список файлов из указанного пользователем каталога. В данном списке не должны показываться элементы, чье время создания раньше, чем указанное пользователем значение.
|
Из за большого объема этот материал размещен на нескольких страницах:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 |


