Я думаю, многие встречались с необходимостью совершать различные операции с файлами как-то копирование или удаление, переименование, запись в файл . В этой статье я попытаюсь рассказать, как можно реализовать на С и С++. Начнем, пожалуй, с простого переименования файлов: Первый пример на С Code: #include <stdio.h> 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; } Для копирования файлов в С, в отличие от С++ не предусмотрено библиотечных функций, поэтому придется писать свою: Code: #include <stdio.h> 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 – библиотечная, что видно в следующем примере: Code: #include <windows.h> #include <iostream.h> 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; } Далее мы рассмотрим варианты удаления файла, сначала на С: Code: #include <stdio.h> 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 в С++ имеет похожее применение: Code: #include <windows.h> #include <iostream.h> 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: Code: #include <stdlib.h> #include <stdio.h> 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++) {, data[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); } В С++ же, используется другая функция: Code: #include <windows.h> #include <iostream.h> 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.)
Тема-то маленькая (не большая), мог бы и описать функции поподробнее, а не вывалить кучу примеров Больше похоже на шпаргалку, а не на статью PS fflush,fgets, fputs ?
к чему ты всё это написал? уж копирование то файла, я думаю совершенно любой человек сможет сам реализовать, почитав доку пару минут, по мимо этого в с++ нету никакой стандартной функции под именем "CopyFile", зато есть кросплатформенная либа, boost::filesystem, которая позволяет делать много замечательных вещей с файлами и дирикториями, и копировать их в том числе. Короче говоря за неадекватность и некорректность писанины тебе -. //жалко, что немогу ставить минус.
Ты че наркоман?? Что курил-то? DeleteFile,CreateFile,CopyFile никак не связаны с С/С++. Это Win32 API! Иди читай мануалы. Низачот. ндаааа.. Мало того, примеры, которые якобы на Си у тебя написаны, на самом деле написаны на С++! Используются возможности плюсов. иопт, даже потерял дар речи. звиздец.
а мне вообще интересно, зачемнаэтом форуме выкладывать вырезки из учебника? Давайте может напишем статью: "ie - это просто!"