Форум программистов, компьютерный форум, киберфорум
Наши страницы
С++ для начинающих
Войти
Регистрация
Восстановить пароль
 
 
Рейтинг 4.86/7: Рейтинг темы: голосов - 7, средняя оценка - 4.86
AnonymC
1179 / 462 / 86
Регистрация: 23.06.2009
Сообщений: 6,375
Завершенные тесты: 1
1

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

19.12.2009, 23:17. Просмотров 1302. Ответов 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
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
19.12.2009, 23:17
Ответы с готовыми решениями:

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

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

Обработка файлов. Функция seekg();
ifstream fileReader(&quot;sdf.txt&quot;); int a; while (fileReader &gt;&gt; a) { ...; } А...

Функция слияния двух текстовых файлов
Здравствуйте. Прошу помощи, потому как даже не представляю как можно это...

Рекурсивная функция вывода всех файлов и директорий
функция ищет все файлы включая директории с набором др. файлов и директорий при...

22
CyBOSSeR
Эксперт С++
2310 / 1683 / 148
Регистрация: 06.03.2009
Сообщений: 3,675
19.12.2009, 23:32 2
МедведЪ, много недочетов.
Цитата Сообщение от МедведЪ Посмотреть сообщение
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
1179 / 462 / 86
Регистрация: 23.06.2009
Сообщений: 6,375
Завершенные тесты: 1
19.12.2009, 23:36  [ТС] 3
CyBOSSeR, а как можно копировать?Кодможно посмотреть?

Добавлено через 2 минуты
Цитата Сообщение от CyBOSSeR Посмотреть сообщение
МедведЪ, как ты изучаешь программирование?
жду когда мне к концу года сделают подарок в виде многих книг по С++ и вижуал С++
0
niXman
Эксперт С++
3202 / 1451 / 73
Регистрация: 09.08.2009
Сообщений: 3,441
Записей в блоге: 2
20.12.2009, 00:26 4
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
Эксперт С++
2310 / 1683 / 148
Регистрация: 06.03.2009
Сообщений: 3,675
20.12.2009, 00:26 5
Цитата Сообщение от МедведЪ Посмотреть сообщение
жду когда мне к концу года сделают подарок в виде многих книг по С++ и вижуал С++
Не надо многих, нужна одна хорошая и именно по С++.
Например эта: Э.Кёниг, Б.Му. Эффективное программирование на С++. Практическое программирование на примерах. Серия C++ In-Depth. М. Издательский дом "Вильямс", 2002 г.
Если хочешь я тебе ее скину.
Обязательно выполни и поработай со всеми примерами в книге. Без этого ты далеко не уедешь.
0
AnonymC
1179 / 462 / 86
Регистрация: 23.06.2009
Сообщений: 6,375
Завершенные тесты: 1
20.12.2009, 13:37  [ТС] 6
CyBOSSeR, мне купят книги по С++ и вижуал С++..еще чтобы для чипов программировал

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

Добавлено через 51 секунду
и еще у меня unistd.h не находит
0
niXman
Эксперт С++
3202 / 1451 / 73
Регистрация: 09.08.2009
Сообщений: 3,441
Записей в блоге: 2
20.12.2009, 13:41 7
Цитата Сообщение от МедведЪ Посмотреть сообщение
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
1179 / 462 / 86
Регистрация: 23.06.2009
Сообщений: 6,375
Завершенные тесты: 1
20.12.2009, 13:59  [ТС] 8
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
Эксперт С++
3202 / 1451 / 73
Регистрация: 09.08.2009
Сообщений: 3,441
Записей в блоге: 2
20.12.2009, 14:16 9
хидеры добавь из первого моего примера.
0
CyBOSSeR
Эксперт С++
2310 / 1683 / 148
Регистрация: 06.03.2009
Сообщений: 3,675
20.12.2009, 16:21 10
МедведЪ, вот тебе пример:
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
1179 / 462 / 86
Регистрация: 23.06.2009
Сообщений: 6,375
Завершенные тесты: 1
20.12.2009, 19:26  [ТС] 11
Цитата Сообщение от 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
Эксперт С++
2310 / 1683 / 148
Регистрация: 06.03.2009
Сообщений: 3,675
20.12.2009, 19:31 12
Цитата Сообщение от МедведЪ Посмотреть сообщение
сообщения засунул в саму функцию
МедведЪ, это плохо, функция копирования файла не должна выводить ничего на экран. Что если ты захочешь использовать ее в приложениях c GUI? Там не будет никаких cin/cout. Или тебе надо скопировать 1000 файлов, будет на экране 1000 раз надпись "Успешно"?
Функция должна выполнять только свою задачу (копирование файлов), уведомление пользователя в ее задачу не входит. Она только может с помощью возвращаемого значения проинформировать вызывающую функцию о результате работы.
0
AnonymC
1179 / 462 / 86
Регистрация: 23.06.2009
Сообщений: 6,375
Завершенные тесты: 1
20.12.2009, 19:46  [ТС] 13
CyBOSSeR, мде...у меня что то не получается...мне нужна помощь,надо case поместить в CopyFile

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

Не по теме:

а что такое GUI?

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

Добавлено через 29 секунд
Цитата Сообщение от МедведЪ Посмотреть сообщение
unistd не находит
ну да, код для никсов)
0
AnonymC
1179 / 462 / 86
Регистрация: 23.06.2009
Сообщений: 6,375
Завершенные тесты: 1
20.12.2009, 20:00  [ТС] 15
!!!!!!!!!!!!!!!!!!почему когда адрес второго файла ввожу ПРОВПРО пишет Прошло успешно??!я оменял вот здесь
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
Эксперт С++
2310 / 1683 / 148
Регистрация: 06.03.2009
Сообщений: 3,675
20.12.2009, 20:13 16
Цитата Сообщение от МедведЪ Посмотреть сообщение
проге кажется что адрес второго файла верный...или он вообще не проверяет????
Все правильно, если второго файла не существует, он его создаст сам. Если указывать путь не будешь, файл будет расположен в папке с проектом.
0
AnonymC
1179 / 462 / 86
Регистрация: 23.06.2009
Сообщений: 6,375
Завершенные тесты: 1
20.12.2009, 20:30  [ТС] 17
Цитата Сообщение от CyBOSSeR Посмотреть сообщение
Все правильно, если второго файла не существует, он его создаст сам.
как????если так то для чего
C++
1
      std::cout << "Не удалось открыть результирующий файл" << std::endl;
0
CyBOSSeR
Эксперт С++
2310 / 1683 / 148
Регистрация: 06.03.2009
Сообщений: 3,675
20.12.2009, 20:45 18
У файлов есть атрибут только для чтения.
Так вот файл с таким атрибутом для записи открыть нельзя.
Также у пользователя запустившего программу может не хватать прав для записи.
0
AnonymC
1179 / 462 / 86
Регистрация: 23.06.2009
Сообщений: 6,375
Завершенные тесты: 1
20.12.2009, 21:04  [ТС] 19
CyBOSSeR, значить код правильный?Который я исправил?
0
CyBOSSeR
Эксперт С++
2310 / 1683 / 148
Регистрация: 06.03.2009
Сообщений: 3,675
20.12.2009, 21:09 20
Цитата Сообщение от МедведЪ Посмотреть сообщение
CyBOSSeR, значить код правильный?Который я исправил?
Программа выполняет свою задачу?
Если да - то код правильный.
1
20.12.2009, 21:09
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
20.12.2009, 21:09

Функция поиска файлов, и вывод списка найденных (использую FindFirstFile, FindNextFile)
Друзья, возникла следующая сложность, написал функцию для поиска файлов(.txt) в...

Написать программу, которая обеспечивает:начальное формирование каталога файлов;вывод каталога файлов;удаление файлов...
Уважаемые хакеры!Прошу вашей помощи!Я в СИ не особо шарю.((( А на днях уже...

Функция sqrt: существует более одного экземпляра. Функция перегруженная
#include &lt;iostream&gt; #include &lt;math.h&gt; #include &lt;iomanip&gt; using namespace...


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

Или воспользуйтесь поиском по форуму:
20
Ответ Создать тему
Опции темы

КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2018, vBulletin Solutions, Inc.
Рейтинг@Mail.ru