Форум программистов, компьютерный форум CyberForum.ru
Наши страницы

С++ для начинающих

Войти
Регистрация
Восстановить пароль
 
 
Рейтинг: Рейтинг темы: голосов - 10, средняя оценка - 4.80
^Tecktonik_KiLLeR
1159 / 441 / 22
Регистрация: 23.06.2009
Сообщений: 6,242
Завершенные тесты: 1
#1

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

19.12.2009, 23:17. Просмотров 1240. Ответов 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
Здравствуйте! Я подобрал для вас темы с ответами на вопрос функция копировки файлов (C++):

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

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

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

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

Рекурсивная функция вывода всех файлов и директорий - C++
функция ищет все файлы включая директории с набором др. файлов и директорий при этом выводит их на экран. Вместо того, чтобы вывести...

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

Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
CyBOSSeR
Эксперт C++
2302 / 1672 / 86
Регистрация: 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
^Tecktonik_KiLLeR
1159 / 441 / 22
Регистрация: 23.06.2009
Сообщений: 6,242
Завершенные тесты: 1
19.12.2009, 23:36  [ТС] #3
CyBOSSeR, а как можно копировать?Кодможно посмотреть?

Добавлено через 2 минуты
Цитата Сообщение от CyBOSSeR Посмотреть сообщение
МедведЪ, как ты изучаешь программирование?
жду когда мне к концу года сделают подарок в виде многих книг по С++ и вижуал С++
0
niXman
Эксперт C++
3135 / 1447 / 49
Регистрация: 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
Эксперт C++
2302 / 1672 / 86
Регистрация: 06.03.2009
Сообщений: 3,675
20.12.2009, 00:26 #5
Цитата Сообщение от МедведЪ Посмотреть сообщение
жду когда мне к концу года сделают подарок в виде многих книг по С++ и вижуал С++
Не надо многих, нужна одна хорошая и именно по С++.
Например эта: Э.Кёниг, Б.Му. Эффективное программирование на С++. Практическое программирование на примерах. Серия C++ In-Depth. М. Издательский дом "Вильямс", 2002 г.
Если хочешь я тебе ее скину.
Обязательно выполни и поработай со всеми примерами в книге. Без этого ты далеко не уедешь.
0
^Tecktonik_KiLLeR
1159 / 441 / 22
Регистрация: 23.06.2009
Сообщений: 6,242
Завершенные тесты: 1
20.12.2009, 13:37  [ТС] #6
CyBOSSeR, мне купят книги по С++ и вижуал С++..еще чтобы для чипов программировал

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

Добавлено через 51 секунду
и еще у меня unistd.h не находит
0
niXman
Эксперт C++
3135 / 1447 / 49
Регистрация: 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
^Tecktonik_KiLLeR
1159 / 441 / 22
Регистрация: 23.06.2009
Сообщений: 6,242
Завершенные тесты: 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
Эксперт C++
3135 / 1447 / 49
Регистрация: 09.08.2009
Сообщений: 3,441
Записей в блоге: 2
20.12.2009, 14:16 #9
хидеры добавь из первого моего примера.
0
CyBOSSeR
Эксперт C++
2302 / 1672 / 86
Регистрация: 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
^Tecktonik_KiLLeR
1159 / 441 / 22
Регистрация: 23.06.2009
Сообщений: 6,242
Завершенные тесты: 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
Эксперт C++
2302 / 1672 / 86
Регистрация: 06.03.2009
Сообщений: 3,675
20.12.2009, 19:31 #12
Цитата Сообщение от МедведЪ Посмотреть сообщение
сообщения засунул в саму функцию
МедведЪ, это плохо, функция копирования файла не должна выводить ничего на экран. Что если ты захочешь использовать ее в приложениях c GUI? Там не будет никаких cin/cout. Или тебе надо скопировать 1000 файлов, будет на экране 1000 раз надпись "Успешно"?
Функция должна выполнять только свою задачу (копирование файлов), уведомление пользователя в ее задачу не входит. Она только может с помощью возвращаемого значения проинформировать вызывающую функцию о результате работы.
0
^Tecktonik_KiLLeR
1159 / 441 / 22
Регистрация: 23.06.2009
Сообщений: 6,242
Завершенные тесты: 1
20.12.2009, 19:46  [ТС] #13
CyBOSSeR, мде...у меня что то не получается...мне нужна помощь,надо case поместить в CopyFile

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

Не по теме:

а что такое GUI?

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

Добавлено через 29 секунд
Цитата Сообщение от МедведЪ Посмотреть сообщение
unistd не находит
ну да, код для никсов)
0
^Tecktonik_KiLLeR
1159 / 441 / 22
Регистрация: 23.06.2009
Сообщений: 6,242
Завершенные тесты: 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
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
20.12.2009, 20:00
Привет! Вот еще темы с ответами:

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

Функция sqrt: существует более одного экземпляра. Функция перегруженная - C++
#include &lt;iostream&gt; #include &lt;math.h&gt; #include &lt;iomanip&gt; using namespace std; int main(){ float s, p; int c, a; s=0; ...

Функция удаления текста в скобках [2], непосредственно функция + 12кб вложений - C++
Доброго времени суток, случилось так, что пришлось работать с с-строками (лаба, угу), в которой нужно удалить весь текст в скобках,...

Перегрузка операций: friend-функция или функция-член класса - C++
Здравствуйте, меня интересует вопрос, в чем разница при перегрузке операторов через operator и friend. Вот к примеру такой код. class...


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

Или воспользуйтесь поиском по форуму:
Yandex
Объявления
20.12.2009, 20:00
Ответ Создать тему
Опции темы

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