Форум программистов, компьютерный форум, киберфорум
С++ для начинающих
Войти
Регистрация
Восстановить пароль
Блоги Сообщество Поиск Заказать работу  
 
 
Рейтинг 4.67/18: Рейтинг темы: голосов - 18, средняя оценка - 4.67
 Аватар для AnonymC
1183 / 468 / 87
Регистрация: 23.06.2009
Сообщений: 6,390

функция копировки файлов

19.12.2009, 23:17. Показов 3569. Ответов 22
Метки нет (Все метки)

Студворк — интернет-сервис помощи студентам
написал функцию копировки файлов,и естетвенно не без ошибок!!!
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
bool fileCopy(char firstFile[80],char secondFile[80]){
    FILE* f=fopen(firstFile,"r");
    int c=0;
    int i=0;
    int y=0;
    if((c=getc(f))==NULL){cout<<"File "<<firstFile<<" not found!";
    return 0;
    }
    FILE* f2=fopen(secondFile, "w");
    while(c!='\0'){
    c=(getc(f2));
    i++;
    }
    cout<<"Successful\.";
    return 1;}
вызов
C++
1
2
3
4
5
6
file copy;
    char a[100];
char b[100];
cin.getline(a,100);
cin.getline(b,100);
copy.fileCopy(a,b);
Добавлено через 59 секунд
вот после того как ввожу пути файлов выскакивает окошко с:
Microsoft Visual Studio C Runtime Library has detected a fatal error in proba.exe.
0
Programming
Эксперт
39485 / 9562 / 3019
Регистрация: 12.04.2006
Сообщений: 41,671
Блог
19.12.2009, 23:17
Ответы с готовыми решениями:

при копировки -> вставки вылазит пустой рабочий стол
когда я пытаюсь скопировать название, делаю &quot;изменить - копировать&quot;, и вставить его в другой файл, у меня все зависает, а после выходит...

функция слияния файлов
вообще мне надо сделать сортирову четырех путевым слиянием но это уже хоть что то.... помогите мне разобратся в этом коде с...

Функция поиска файлов
Всем привет, нужен примерчик, а может у кого есть наработки, в вопросе поиска файлов в определенной папке/диске, причем, с обходом и...

22
Эксперт С++
 Аватар для CyBOSSeR
2348 / 1721 / 149
Регистрация: 06.03.2009
Сообщений: 3,675
19.12.2009, 23:32
МедведЪ, много недочетов.
Цитата Сообщение от МедведЪ Посмотреть сообщение
C++
1
FILE* f=fopen(firstFile,"r");
Сразу после этой строки можно уже проверить, открылся файл или нет.

Функция fileCopy объявлена возвращающей булево значение, а в ней ты пишешь
Цитата Сообщение от МедведЪ Посмотреть сообщение
C++
1
2
3
4
//...
return 0;
//...
return 1;
Понятно дело что неявно 0 приведется к false, а 1 к true, но зачем лишние преобразования, да и просто нелогично это.
Цитата Сообщение от МедведЪ Посмотреть сообщение
C++
1
bool fileCopy(char firstFile[80],char secondFile[80])
Вместо вот этого можно просто написать
C++
1
bool fileCopy(const char* firstFile,const char* secondFile)
Без лишних указаний размеров.

Код копирования я вообще не наблюдаю.

МедведЪ, как ты изучаешь программирование?
0
 Аватар для AnonymC
1183 / 468 / 87
Регистрация: 23.06.2009
Сообщений: 6,390
19.12.2009, 23:36  [ТС]
CyBOSSeR, а как можно копировать?Кодможно посмотреть?

Добавлено через 2 минуты
Цитата Сообщение от CyBOSSeR Посмотреть сообщение
МедведЪ, как ты изучаешь программирование?
жду когда мне к концу года сделают подарок в виде многих книг по С++ и вижуал С++
0
Эксперт С++
 Аватар для niXman
3211 / 1459 / 74
Регистрация: 09.08.2009
Сообщений: 3,441
Записей в блоге: 2
20.12.2009, 00:26
C
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
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
#include <fcntl.h>                /** для O_CREAT, O_TRUNC                */
#include <errno.h>                /** для errno                                                */
#include <string.h>                /** для strerror()                                */
#include <stdio.h>                /** для fprintf()                                        */
#include <unistd.h>                /** основной хидер                                */
#include <sys/stat.h>        /** для stat(), struct stat        */
 
/** выводит пример использования программы */
void usage(const char* pn) {
        fprintf(stderr, "usage: %s <infile> <outfile>\n", pn);
}
 
/** основная функция */
int main(int argc, const char** argv) {
        if ( argc != 3 ) {
                usage(argv[0]);
                return 0;
        }
 
        /** структура содержащая информацию о файле */
        struct stat st;
        /** заполняем структуру информацией о файле */
        if ( stat(argv[1], &st) ) {
                /** если ошибка - сообщаем, завершаемся */
                fprintf(stderr, "ошибка: %s\n", (errno == ENOENT)?"файла не существует":strerror(errno));
                return errno;
        }
 
        /** открываем исходный файл для чтения */
        int infile = open(argv[1], O_RDONLY);
        if ( -1 == infile ) {
                /** если ошибка - сообщаем, завершаемся */
                fprintf(stderr, "ошибка: %s\n", strerror(errno));
                return errno;
        }
 
        /** создаем результирующий файл */
        int outfile = open(argv[2], O_CREAT|O_TRUNC, st.st_mode);
        if ( -1 == outfile ) {
                /** если ошибка - сообщаем, завершаемся */
                fprintf(stderr, "ошибка: %s\n", strerror(errno));
                close(infile);
                return errno;
        }
 
        /** временный буффер для копирования */
        char buff[BUFSIZ];
        /** кол-во прочитанных байт */
        int rd;
        
        /** цикл, повторяющийся до тех пор, пока не достигнут конец файла */
        /** читаем порцию данных */
        while ( (rd=read(infile, buff, sizeof(buff))) > 0 ) {
                /** записываем */
                write(outfile, buff, rd);
        }
 
        /** закрываем оба файла */
        close(infile);
        close(outfile);
 
        return 0;
}
вот. только что студенту написал))
1
Эксперт С++
 Аватар для CyBOSSeR
2348 / 1721 / 149
Регистрация: 06.03.2009
Сообщений: 3,675
20.12.2009, 00:26
Цитата Сообщение от МедведЪ Посмотреть сообщение
жду когда мне к концу года сделают подарок в виде многих книг по С++ и вижуал С++
Не надо многих, нужна одна хорошая и именно по С++.
Например эта: Э.Кёниг, Б.Му. Эффективное программирование на С++. Практическое программирование на примерах. Серия C++ In-Depth. М. Издательский дом "Вильямс", 2002 г.
Если хочешь я тебе ее скину.
Обязательно выполни и поработай со всеми примерами в книге. Без этого ты далеко не уедешь.
0
 Аватар для AnonymC
1183 / 468 / 87
Регистрация: 23.06.2009
Сообщений: 6,390
20.12.2009, 13:37  [ТС]
CyBOSSeR, мне купят книги по С++ и вижуал С++..еще чтобы для чипов программировал

Добавлено через 2 минуты
niXman, мда...спасибо,но что то помньше нет?

Добавлено через 51 секунду
и еще у меня unistd.h не находит
0
Эксперт С++
 Аватар для niXman
3211 / 1459 / 74
Регистрация: 09.08.2009
Сообщений: 3,441
Записей в блоге: 2
20.12.2009, 13:41
Цитата Сообщение от МедведЪ Посмотреть сообщение
niXman, мда...спасибо,но что то помньше нет?
как ты мог заметить, в коде нет ничего лишнего. можно немного допилить этот код чтоб использовать как функцию.
так:
C
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
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
int copy(const char* src, const char* dst) {
        /** структура содержащая информацию о файле */
        struct stat st;
        /** заполняем структуру информацией о файле */
        if ( stat(src, &st) ) {
                /** если ошибка - сообщаем, завершаемся */
                fprintf(stderr, "ошибка: %s\n", (errno == ENOENT)?"файла не существует":strerror(errno));
                return errno;
        }
 
        /** открываем исходный файл для чтения */
        int infile = open(src, O_RDONLY);
        if ( -1 == infile ) {
                /** если ошибка - сообщаем, завершаемся */
                fprintf(stderr, "ошибка: %s\n", strerror(errno));
                return errno;
        }
 
        /** создаем результирующий файл */
        int outfile = open(dst, O_CREAT|O_TRUNC, st.st_mode);
        if ( -1 == outfile ) {
                /** если ошибка - сообщаем, завершаемся */
                fprintf(stderr, "ошибка: %s\n", strerror(errno));
                close(infile);
                return errno;
        }
 
        /** временный буффер для копирования */
        char buff[BUFSIZ];
        /** кол-во прочитанных байт */
        int rd;
        
        /** цикл, повторяющийся до тех пор, пока не достигнут конец файла */
        /** читаем порцию данных */
        while ( (rd=read(infile, buff, sizeof(buff))) > 0 ) {
                /** записываем */
                write(outfile, buff, rd);
        }
 
        /** закрываем оба файла */
        close(infile);
        close(outfile);
 
        return 0;
}
0
 Аватар для AnonymC
1183 / 468 / 87
Регистрация: 23.06.2009
Сообщений: 6,390
20.12.2009, 13:59  [ТС]
niXman, подключил библиотеки что давал выше...но не может найти unistd удалю его тогда
Error 18 error C3861: 'open': identifier not found d:\head-files\alex.h 2352 proba
Error 19 error C3861: 'open': identifier not found d:\head-files\alex.h 2360 proba
Error 20 error C3861: 'close': identifier not found d:\head-files\alex.h 2364 proba
Error 21 error C3861: 'read': identifier not found d:\head-files\alex.h 2375 proba
Error 22 fatal error C1903: unable to recover from previous error(s); stopping compilation d:\head-files\alex.h 2375 proba
0
Эксперт С++
 Аватар для niXman
3211 / 1459 / 74
Регистрация: 09.08.2009
Сообщений: 3,441
Записей в блоге: 2
20.12.2009, 14:16
хидеры добавь из первого моего примера.
0
Эксперт С++
 Аватар для CyBOSSeR
2348 / 1721 / 149
Регистрация: 06.03.2009
Сообщений: 3,675
20.12.2009, 16:21
МедведЪ, вот тебе пример:
C++
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
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
#include <iostream>
#include <fstream>
#include <algorithm>
 
enum FileError{
  feOK,                       // Ошибок не обнаружено
  feOpenSourceFileError,      // Не удалось открыть исходный файл    
  feOpenDestinationFileError, // Не удалось открыть результирующий файл
};
 
FileError CopyFile(const char* src_file_name, const char* dst_file_name)
{
  std::ifstream src_file(src_file_name);
 
  // Не забываем проверять открылся ли файл
  if(!src_file)
    return feOpenSourceFileError;
 
  std::ofstream dst_file(dst_file_name);
 
  // Не забываем проверять открылся ли файл
  if(!src_file)
    return feOpenDestinationFileError;
 
  // Отключаем пропуск пробелов и переходов на новую строку
  src_file >> std::noskipws;
 
  // Вот и все копирование
  copy(std::istream_iterator<char>(src_file), std::istream_iterator<char>(), std::ostream_iterator<char>(dst_file));
 
  // Не забываем закрывать файлы
  src_file.close();
  dst_file.close();
 
  return feOK;
}
 
int main()
{
  setlocale(LC_ALL, "Russian");
 
  char src_file_name[260];
 
  std::cout << "Исходный файл: ";
  std::cin >> src_file_name;
 
  char dst_file_name[260];
 
  std::cout << "Результирующий файл: ";
  std::cin >> dst_file_name;
 
  // Пользователю необходимо предоставлять подробности
  // результата работы функции
  switch(CopyFile(src_file_name, dst_file_name)){
    case feOK:
      std::cout << "Копирование прошло успешно" << std::endl;
      break;
 
    case feOpenSourceFileError:
      std::cout << "Не удалось открыть исходный файл" << std::endl;
      break;
 
    case feOpenDestinationFileError:
      std::cout << "Не удалось открыть результирующий файл" << std::endl;
      break;
  }
  
  system("pause");
 
  return 0;
}
1
 Аватар для AnonymC
1183 / 468 / 87
Регистрация: 23.06.2009
Сообщений: 6,390
20.12.2009, 19:26  [ТС]
Цитата Сообщение от niXman Посмотреть сообщение
хидеры добавь из первого моего примера
вот я же сказал добавил,только unistd не находит,если удалюя этот файл из кода ты вылетают ошибки

Добавлено через 27 минут
CyBOSSeR, отлично,спасибо большое!!!!!!

Добавлено через 9 минут
C++
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
void CopyFile(const char* src_file_name, const char* dst_file_name)
{
  
    std::ifstream src_file(src_file_name);
 
  // Не забываем проверять открылся ли файл
  if(!src_file)
 cout<<"Не могу найти "<<src_file_name<<endl;
 
  std::ofstream dst_file(dst_file_name);
 
  // Не забываем проверять открылся ли файл
  if(!src_file)
cout<<"Не могу найти "<<dst_file_name<<endl;
 
  // Отключаем пропуск пробелов и переходов на новую строку
  src_file >> std::noskipws;
 
  // Вот и все копирование
  copy(std::istream_iterator<char>(src_file), std::istream_iterator<char>(), std::ostream_iterator<char>(dst_file));
 cout<<"Успешно!";
  // Не забываем закрывать файлы
  src_file.close();
  dst_file.close();
}
вот переделал,сообщения засунул в саму функцию,удалил enum,case...
но не выводится сообщение

Добавлено через 58 секунд
ой ой ойПростите пожалуйста забыл вызвать функию
0
Эксперт С++
 Аватар для CyBOSSeR
2348 / 1721 / 149
Регистрация: 06.03.2009
Сообщений: 3,675
20.12.2009, 19:31
Цитата Сообщение от МедведЪ Посмотреть сообщение
сообщения засунул в саму функцию
МедведЪ, это плохо, функция копирования файла не должна выводить ничего на экран. Что если ты захочешь использовать ее в приложениях c GUI? Там не будет никаких cin/cout. Или тебе надо скопировать 1000 файлов, будет на экране 1000 раз надпись "Успешно"?
Функция должна выполнять только свою задачу (копирование файлов), уведомление пользователя в ее задачу не входит. Она только может с помощью возвращаемого значения проинформировать вызывающую функцию о результате работы.
0
 Аватар для AnonymC
1183 / 468 / 87
Регистрация: 23.06.2009
Сообщений: 6,390
20.12.2009, 19:46  [ТС]
CyBOSSeR, мде...у меня что то не получается...мне нужна помощь,надо case поместить в CopyFile

Добавлено через 1 минуту
CyBOSSeR, ладно...убедил,спасибо значит помощь не нужная про 1000 файлов не знал

Не по теме:

а что такое GUI?

0
Эксперт С++
 Аватар для niXman
3211 / 1459 / 74
Регистрация: 09.08.2009
Сообщений: 3,441
Записей в блоге: 2
20.12.2009, 19:58
Цитата Сообщение от МедведЪ Посмотреть сообщение
а что такое GUI?
Graphical User Intrface

Добавлено через 29 секунд
Цитата Сообщение от МедведЪ Посмотреть сообщение
unistd не находит
ну да, код для никсов)
0
 Аватар для AnonymC
1183 / 468 / 87
Регистрация: 23.06.2009
Сообщений: 6,390
20.12.2009, 20:00  [ТС]
!!!!!!!!!!!!!!!!!!почему когда адрес второго файла ввожу ПРОВПРО пишет Прошло успешно??!я оменял вот здесь
C++
1
2
3
4
5
6
7
8
 if(!src_file)
    return feOpenSourceFileError;
 
  std::ofstream dst_file(dst_file_name);
 
  // Не забываем проверять открылся ли файл
  if(!dst_file)//здесь ошибки была,было вот это  if(!src_file)
    return feOpenDestinationFileError;
поменял твою ошибку но снова проблемы!проге кажется что адрес второго файла верный...или он вообще не проверяет????
0
Эксперт С++
 Аватар для CyBOSSeR
2348 / 1721 / 149
Регистрация: 06.03.2009
Сообщений: 3,675
20.12.2009, 20:13
Цитата Сообщение от МедведЪ Посмотреть сообщение
проге кажется что адрес второго файла верный...или он вообще не проверяет????
Все правильно, если второго файла не существует, он его создаст сам. Если указывать путь не будешь, файл будет расположен в папке с проектом.
0
 Аватар для AnonymC
1183 / 468 / 87
Регистрация: 23.06.2009
Сообщений: 6,390
20.12.2009, 20:30  [ТС]
Цитата Сообщение от CyBOSSeR Посмотреть сообщение
Все правильно, если второго файла не существует, он его создаст сам.
как????если так то для чего
C++
1
      std::cout << "Не удалось открыть результирующий файл" << std::endl;
0
Эксперт С++
 Аватар для CyBOSSeR
2348 / 1721 / 149
Регистрация: 06.03.2009
Сообщений: 3,675
20.12.2009, 20:45
У файлов есть атрибут только для чтения.
Так вот файл с таким атрибутом для записи открыть нельзя.
Также у пользователя запустившего программу может не хватать прав для записи.
0
 Аватар для AnonymC
1183 / 468 / 87
Регистрация: 23.06.2009
Сообщений: 6,390
20.12.2009, 21:04  [ТС]
CyBOSSeR, значить код правильный?Который я исправил?
0
Эксперт С++
 Аватар для CyBOSSeR
2348 / 1721 / 149
Регистрация: 06.03.2009
Сообщений: 3,675
20.12.2009, 21:09
Цитата Сообщение от МедведЪ Посмотреть сообщение
CyBOSSeR, значить код правильный?Который я исправил?
Программа выполняет свою задачу?
Если да - то код правильный.
1
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
inter-admin
Эксперт
29715 / 6470 / 2152
Регистрация: 06.03.2009
Сообщений: 28,500
Блог
20.12.2009, 21:09
Помогаю со студенческими работами здесь

Не работает функция копирования файлов
При попытке копировать любой файл выскакивает сообщение Прекращена работа программы Проводник. И следующий лог ошибки. Имя события...

Обработка файлов. Функция seekg();
ifstream fileReader(&quot;sdf.txt&quot;); int a; while (fileReader &gt;&gt; a) { ...; } А теперь, чтобы повторить данный while нужно написать ...

Функция для сравнения файлов
Даны два текстовый файла, состоящие из некоторого количества строк. Написать функцию для сравнения этих файлов. Помогите пожалуйста

Функция выборочного копирования файлов
В папке file1 есть файлы 1.txt 2.txt 3.txt Как мне скопировать в папку file2 только файлы 1.txt 2.txt ? Зарание спасибо:)

Функция glob для поиска файлов
Привет, граждане программисты! Вопрос очень простой. Есть директория с изображениями &quot;jpeg&quot;, имена файлов произвольные....


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
20
Ответ Создать тему
Новые блоги и статьи
Символьное дифференцирование
igorrr37 13.02.2026
/ * Программа принимает математическое выражение в виде строки и выдаёт его производную в виде строки и вычисляет значение производной при заданном х Логарифм записывается как: (x-2)log(x^2+2) -. . .
Камера Toupcam IUA500KMA
Eddy_Em 12.02.2026
Т. к. у всяких "хикроботов" слишком уж мелкий пиксель, для подсмотра в ESPriF они вообще плохо годятся: уже 14 величину можно рассмотреть еле-еле лишь на экспозициях под 3 секунды (а то и больше),. . .
И ясному Солнцу
zbw 12.02.2026
И ясному Солнцу, и светлой Луне. В мире покоя нет и люди не могут жить в тишине. А жить им немного лет.
«Знание-Сила»
zbw 12.02.2026
«Знание-Сила» «Время-Деньги» «Деньги -Пуля»
SDL3 для Web (WebAssembly): Подключение Box2D v3, физика и отрисовка коллайдеров
8Observer8 12.02.2026
Содержание блога Box2D - это библиотека для 2D физики для анимаций и игр. С её помощью можно определять были ли коллизии между конкретными объектами и вызывать обработчики событий столкновения. . . .
SDL3 для Web (WebAssembly): Загрузка PNG с прозрачным фоном с помощью SDL_LoadPNG (без SDL3_image)
8Observer8 11.02.2026
Содержание блога Библиотека SDL3 содержит встроенные инструменты для базовой работы с изображениями - без использования библиотеки SDL3_image. Пошагово создадим проект для загрузки изображения. . .
SDL3 для Web (WebAssembly): Загрузка PNG с прозрачным фоном с помощью SDL3_image
8Observer8 10.02.2026
Содержание блога Библиотека SDL3_image содержит инструменты для расширенной работы с изображениями. Пошагово создадим проект для загрузки изображения формата PNG с альфа-каналом (с прозрачным. . .
Установка Qt-версии Lazarus IDE в Debian Trixie Xfce
volvo 10.02.2026
В общем, достали меня глюки IDE Лазаруса, собранной с использованием набора виджетов Gtk2 (конкретно: если набирать текст в редакторе и вызвать подсказку через Ctrl+Space, то после закрытия окошка. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru