Изучение функций (средств) Win32 API для работы с файлами и каталогами: Методические рекомендации по выполнению лабораторной работы, страница 4

   {

     MessageBox(NULL, "Ошибка создания файла File_1.txt", "Ошибка!", MB_OK);

     return 0;

   }

  else

  // Закрываем файл для предупреждения ошибки доступа к файлу

  CloseHandle(hFile);

  // Попытаемся скопировать файл, но такой файл уже существует,

  // поэтому получаем сообщение об ошибке

  if (!CopyFile("c:\\мои документы\\Demo_Dir_1\\File_1.txt",

                "c:\\мои документы\\Demo_Dir_1\\File_1.txt", TRUE))

      MessageBox(NULL, "Ошибка копирования файла", "Ошибка!", MB_OK);

  // Переименование файла с помощью перемещения

  if (!MoveFile("c:\\мои документы\\Demo_Dir_1\\File_1.txt",

                "c:\\мои документы\\Demo_Dir_1\\File_2.txt"))

   {

     MessageBox(NULL, "Ошибка переименования файла", "Ошибка!", MB_OK);

     return 0;

   }

   // Вторая попытка копирования файла, файла с таким именем уже нет

  if (!CopyFile("c:\\мои документы\\Demo_Dir_1\\File_2.txt",

                  "c:\\мои документы\\Demo_Dir_2\\File_2.txt", TRUE))

    {

     MessageBox(NULL, "Ошибка копирования файла File_2.txt", "Ошибка!", MB_OK);

     return 0;

    }

  else

       MessageBox(NULL, "Файл скопирован успешно!", "Информация", MB_OK);

   //  пытаемся удалить каталог, в котором есть файлы,

   // поэтому получаем сообщение об ошибке

  if (!RemoveDirectory("c:\\мои документы\\Demo_Dir_1"))

        MessageBox(NULL, "Ошибка удаления директории", "Ошибка!", MB_OK);

   // Удаляем файлы из второй директории

  DeleteFile("c:\\мои документы\\Demo_Dir_2\\File_1.txt");

  DeleteFile("c:\\мои документы\\Demo_Dir_2\\File_2.txt");

   // Удаляем файл из первой директории

  DeleteFile("c:\\мои документы\\Demo_Dir_1\\File_2.txt");

   // Удаляем первую директорию

  RemoveDirectory("c:\\мои документы\\Demo_Dir_1");

   //  Пытаемся удалить текущую директорию

  if (!RemoveDirectory("c:\\мои документы\\Demo_Dir_2"))

        MessageBox(NULL, "Ошибка удаления директории\n , \

         возможно, что она текущая", "Ошибка!", MB_OK);

    //  Восстанавливаем исходную текущую директорию

  SetCurrentDirectory(cBufferForCurrentDirectory);

    //  Удаляем вторую директорию

  RemoveDirectory("c:\\мои документы\\Demo_Dir_2");

  return 1;

  }

  Приложение 2.

//Программа, демонстрирующая основные файловые функции API Win32:

//Создание каталога, создание файла, запись в файл,

//чтение из файла, уничтожение файла и каталога

//Тип  приложения -  Win32  GUI

#include <windows.h>

int APIENTRY WinMain(HINSTANCE hInstance, HINSTANCE hPrevinstance,

                     LPSTR lpszCmdParam, int nCmdShow)

{

  char cBuffer[0x400];

  char cDirectoryBuffer[0x400];

  char cTextBuffer[]=" Выхожу один я на дорогу, \

                     \n Сквозь туман кремнистый путь блестит.\

                     \n Ночь тиха, пустыня внемлет богу,\

                     \n И звезда с звездою говорит..";

  HANDLE hFile;

  DWORD dwBytes;

  int i;

//Определение текущего каталога и запоминание его имени в

//массиве  cDirectoryBuffer

  GetCurrentDirectory(0x400, cDirectoryBuffer);

// Создание каталога

  CreateDirectory("c:\\Demo_Cat", NULL);

// Установка созданного каталога текущим

  SetCurrentDirectory("c:\\Demo_Cat");

// Создание файла в каталоге

  if(INVALID_HANDLE_VALUE == (hFile=CreateFile("TestFile.tst",

                              GENERIC_WRITE, FILE_SHARE_READ,

                              NULL, CREATE_NEW, FILE_ATTRIBUTE_NORMAL,NULL)))

   {

      MessageBox(NULL, "Ошибка создания файла","Ошибка!",MB_OK);

      return 0;

   }

// Запись данных в файл

   WriteFile(hFile,cTextBuffer, sizeof(cTextBuffer),&dwBytes,NULL);

// Закрытие файла

   CloseHandle(hFile);

// Очистка буфера

   for(i = 0; i< sizeof(cTextBuffer); *(cTextBuffer+i) = 0, i++);

// Отбражение состояния  буфера

   MessageBox(NULL, cTextBuffer, "Буфер чист!", MB_OK);

// Открываем файл для чтения

  if(INVALID_HANDLE_VALUE == (hFile=CreateFile("TestFile.tst",

                              GENERIC_READ, FILE_SHARE_READ,

                          NULL, OPEN_EXISTING, FILE_ATTRIBUTE_NORMAL,NULL)))

  {

     MessageBox(NULL, "Ошибка открытия файла", "Ошибка", MB_OK);

     return 0;

  }

// Чтение из файла в буфер

  ReadFile(hFile,cTextBuffer, sizeof(cTextBuffer),&dwBytes,NULL);

// Отображение содержимого буфера

  MessageBox(NULL, cTextBuffer, "Буфер заполнен", MB_OK);

// Закрытие файла

  CloseHandle(hFile);

// Удаление файла

  DeleteFile("TestFile.tst");

// Восстановление прежнего текущего каталога

  SetCurrentDirectory(cDirectoryBuffer);

//  Удаление созданного каталога

  RemoveDirectory("c:\Demo_Cat");

  // Завершение работы программы

  MessageBox(NULL, "Закончить работу программы ?", "Информация", MB_OK);

  return 1;

}

Приложение 3.

// Программа демонстрирует вызов функции CreateFile() для открытия файла

//  Тип приложения - Win32, Console

// функция GetStdHandle() возвращает дескриптор стандартного вывода

// Далее функцией ReadFile() происходит чтение файла блоками

// по 4 Кбайт и передача в стандартный поток вывода (экран)

// При запуске приложения в строке запуска

// кроме имени исполняемого файла передается параметр

//  -имя файла для чтения программой

#include <windows.h>

// функция открытия файла для чтения и передачи

//в поток стандартного вывода (экран) по 4096 байт

void DoOpenRead(char *fname)

{

 HANDLE f=CreateFile(fname, GENERIC_READ,0,NULL, OPEN_EXISTING,0,NULL);

 HANDLE out=GetStdHandle(STD_OUTPUT_HANDLE);

 if (f==INVALID_HANDLE_VALUE)

 {

  MessageBox(NULL,"Ошибка открытия файла!",NULL,MB_OK|MB_ICONSTOP);

  exit(1);

 }

 char buf[4096];

 unsigned long n;

 do

 {

  unsigned long wct;

  if (!ReadFile(f,buf, sizeof(buf), &n, NULL)) break;

   if (n) WriteFile(out,buf, n , &wct, NULL);

 }

 while (n == sizeof(buf));

 CloseHandle(f);

 }

 //функция  main(), обратите внимание на аргументы main()

void main(int argc, char *argv[])

{

 if (argc==1) {

   MessageBox(NULL,"Командная строка должна иметь вид: readout_1 FILENAME ",

                    NULL,MB_OK|MB_ICONSTOP);

   exit(-1);

  }

while (--argc) DoOpenRead(*++argv);// Открытие и чтение файла

MessageBox(NULL,"Закончить программу? ", "Информация",MB_OK|MB_ICONSTOP);

 exit(0);

}