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

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

19.12.2009, 23:17. Показов 3527. Ответов 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
Ответ Создать тему
Новые блоги и статьи
PhpStorm 2025.3: WSL Terminal всегда стартует в ~
and_y87 14.12.2025
PhpStorm 2025. 3: WSL Terminal всегда стартует в ~ (home), игнорируя директорию проекта Симптом: После обновления до PhpStorm 2025. 3 встроенный терминал WSL открывается в домашней директории. . .
Как объединить две одинаковые БД Access с разными данными
VikBal 11.12.2025
Помогите пожалуйста !! Как объединить 2 одинаковые БД Access с разными данными.
Новый ноутбук
volvo 07.12.2025
Всем привет. По скидке в "черную пятницу" взял себе новый ноутбук Lenovo ThinkBook 16 G7 на Амазоне: Ryzen 5 7533HS 64 Gb DDR5 1Tb NVMe 16" Full HD Display Win11 Pro
Музыка, написанная Искусственным Интеллектом
volvo 04.12.2025
Всем привет. Некоторое время назад меня заинтересовало, что уже умеет ИИ в плане написания музыки для песен, и, собственно, исполнения этих самых песен. Стихов у нас много, уже вышли 4 книги, еще 3. . .
От async/await к виртуальным потокам в Python
IndentationError 23.11.2025
Армин Ронахер поставил под сомнение async/ await. Создатель Flask заявляет: цветные функции - провал, виртуальные потоки - решение. Не threading-динозавры, а новое поколение лёгких потоков. Откат?. . .
Поиск "дружественных имён" СОМ портов
Argus19 22.11.2025
Поиск "дружественных имён" СОМ портов На странице: https:/ / norseev. ru/ 2018/ 01/ 04/ comportlist_windows/ нашёл схожую тему. Там приведён код на С++, который показывает только имена СОМ портов, типа,. . .
Сколько Государство потратило денег на меня, обеспечивая инсулином.
Programma_Boinc 20.11.2025
Сколько Государство потратило денег на меня, обеспечивая инсулином. Вот решила сделать интересный приблизительный подсчет, сколько государство потратило на меня денег на покупку инсулинов. . . .
Ломающие изменения в C#.NStar Alpha
Etyuhibosecyu 20.11.2025
Уже можно не только тестировать, но и пользоваться C#. NStar - писать оконные приложения, содержащие надписи, кнопки, текстовые поля и даже изображения, например, моя игра "Три в ряд" написана на этом. . .
Мысли в слух
kumehtar 18.11.2025
Кстати, совсем недавно имел разговор на тему медитаций с людьми. И обнаружил, что они вообще не понимают что такое медитация и зачем она нужна. Самые базовые вещи. Для них это - когда просто люди. . .
Создание Single Page Application на фреймах
krapotkin 16.11.2025
Статья исключительно для начинающих. Подходы оригинальностью не блещут. В век Веб все очень привыкли к дизайну Single-Page-Application . Быстренько разберем подход "на фреймах". Мы делаем одну. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2025, CyberForum.ru