Я думаю, багато зустрічалися з необхідністю здійснювати різні операції з файлами якось копіювання або видалення, перейменування, запис в файл. У цій статті я спробую розповісти, як можна реалізувати на С і С++.
Почнемо, мабуть, з простого перейменування файлів:
Перший приклад на С

#include

int main( void )
{
/* Змінні*/
char oldname[80], newname[80];
/* Введення початкового імені файлу*/

printf(«Enter current filename: „);
gets(oldname);
/* Введення нового імені файлу*/

printf(“Enter new name for file: „);
gets(newname);
/*Процедура перейменування */
if ( rename( oldname, newname ) == 0 )
printf(“%s has been renamed %s.n», oldname, newname);
else
/*Помилка */

fprintf(stderr, «An error has occurred renaming %s.n», oldname);
return 0;
}
Для копіювання файлів З, на відміну від С++ не передбачено бібліотечних функцій, тому доведеться писати свою:

#include

int file_copy( char *oldname, char *newname );

int main( void )
{
char source[80], destination[80];
/* Отримати початкове ім’я і кінцеве ім’я*/

printf(«nEnter source file: „);
gets(source);
printf(“nEnter destination file: „);
gets(destination);
/* Операція копіювання*/

if ( file_copy( source, destination ) == 0 )
puts(“Copy operation successful»);
else
fprintf(stderr, «Error during copy operation»);
return(0);
}
/* Функція копіювання*/

int file_copy( char *oldname, char *newname )
{
FILE *fold, *fnew;
int c;

if ( ( fold = fopen( oldname, «rb» ) ) == NULL )
return -1;

if ( ( fnew = fopen( newname, «wb» ) ) == NULL )
{
fclose ( fold );
return -1;
}

/* Зчитується файл по одному байту,
/*поки не зустрінеться завершальний символ */

while (1)
{
c = fgetc( fold );

if ( !feof( fold ) )
fputc( c, fnew );
else
break;
}

fclose ( fnew );
fclose ( fold );

return 0;

В С++ ж, функція CopyFile бібліотечна, що видно в наступному прикладі:

#include
#include
int main()
{
// копіюємо файл
if(!CopyFile(«C:demo_file.dat», «C:new_file.dat», FALSE))
{
cerr < < «Copy file failed.» < < endl
< < «The last error code: » < < GetLastError() < < endl;
cout < < «Press any key to finish.»;
cin.get();
return 0;
}
cout < < «The file is copied.» < < endl;
return 0;
}
Далі ми розглянемо варіанти видалення файлу, спочатку З:
#include
int main( void )
{
char filename[80];
printf(«Enter the filename to delete: „);
gets(filename);
/* Видалення */
if ( remove(filename) == 0)
printf(“The file %s has been deleted.n», filename);
else
fprintf(stderr, «Error deleting the file %s.n», filename);
return 0;
}
Функція DeleteFile в С++ має схожу застосування:

#include
#include

int main()
{
// видаляємо файл
if(!DeleteFile(«C:demo_file.dat»))
{
cerr < < «Delete file failed.» < < endl
<< «The last error code: » < < GetLastError() < < endl;
cout < < «Press any key to finish.»;
cin.get();
return 0;
}
cout < < «The file is deleted.» < < endl;
return 0;
}

Коли ж потрібно записати інформацію в файл, використовується функція fprintf:
#include
#include

void clear_kb(void);
int main( void )
{
FILE *fp;
char data[50];
int count;
char filename[20];

puts(«Enter someting to wrtie into.»);
gets(data);
clear_kb();
puts(«Enter a name for the file.»);
gets(filename);
if ( (fp = fopen(filename, «w»)) == NULL)
{
fprintf(stderr, «Error opening file %s.», filename);
exit(1);
}

for (count = 0; count < 5; count++)
{
fprintf(fp, «ndata[%d] = %f», count, data[count]);
fprintf(stdout, «ndata[%d] = %f», count, data[count]);
}
fclose(fp);
printf(«n»);
return 0;
}

void clear_kb(void)
{
char junk[80];
gets(junk);
}

В С++ ж, використовується інша функція:

#include
#include

int main()
{
HANDLE hFile;

// створюємо файл для запису даних
hFile = CreateFile(
«C:demo_file.dat», // ім’я файлу
GENERIC_WRITE, // запис в файл
0, // монопольний доступ до файлу
NULL, // захисту немає
CREATE_NEW, // створюємо новий файл
FILE_ATTRIBUTE_NORMAL, // звичайний файл
NULL // шаблону немає
);
// перевіряємо на успішне створення
if (hFile == INVALID_HANDLE_VALUE)
{
cerr << «Create file failed.» << endl
<< «The last error code: » << GetLastError() << endl;
cout << «Press any key to finish.»;
cin.get();
return 0;
}

// пишемо дані в файл
for (int i = 0; i < 10; i++)
{
DWORD dwBytesWrite;

if (!WriteFile(
hFile, // дескриптор файлу
&i, // адреса буфера, звідки йде запис
sizeof(i), // кількість записуваних байт
&dwBytesWrite, // кількість записаних байтів
(LPOVERLAPPED)NULL // запис синхронна
))
{
cerr << «Write file failed.» << endl
<< «The last error code: » << GetLastError() << endl;
CloseHandle(hFile);
cout << «Press any key to finish.»;
cin.get();
return 0;
}
}
// закриваємо дескриптор файлу
CloseHandle(hFile);

cout << «The file is created and written.» << endl;

return 0;
}

Ну ось власне і все, to be continued