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

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

Войти
Регистрация
Восстановить пароль
 
 
Рейтинг: Рейтинг темы: голосов - 33, средняя оценка - 4.67
co6ak
Кошковед
407 / 500 / 29
Регистрация: 12.04.2010
Сообщений: 1,392
#1

Копирование файлов - C++

14.08.2011, 19:51. Просмотров 4617. Ответов 45
Метки нет (Все метки)

Народ, дайте пожалуйста исходник копирования файлов по принципу "открыть файл1 -> считать в буфер содержимое -> открыть файл2 -> заменить содержимое -> сохранить файл2"


очень нужно. зашиваюсь
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
14.08.2011, 19:51     Копирование файлов
Посмотрите здесь:

копирование файлов - C++
Всем приятного времени суток! Мне нужно просто скопировать файл, вроде ничего сложного) Сделал так: #include <stdio.h> #include...

Копирование файлов - C++
Приветствую. Пытался написать программу для копирования содержимого одного файла в другой: #include <iostream> #include...

копирование файлов - C++
Зраствуйте можете подсказать алгоритм копирования файлов любого типу(разширения)??

Копирование файлов C++ - C++
Прошу помочь найти в чем здесь ошибка. Условие: Дан текстовый файл на русском языке. Скопировать содержимое данного файла в новый...

Побайтовое копирование файлов - C++
Добрый день. Подскажите пожалуйста,как в данном примере можно было бы выполнить копирование файла в обратном порядке? ifstream...

Копирование, сортировка файлов - C++
Добрый день! У меня в папке много различных файлов необходимо, переместить или скопировать их по различным созданным папкам(сортировка не...

Копирование текстовых файлов - C++
Столкнулся с такой проблемой : при копировании из одного файла в другой мне нужно исключить(пропустить) слова, которые начинаются на букву,...

После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
asics
Freelance
Эксперт C++
2846 / 1783 / 144
Регистрация: 09.09.2010
Сообщений: 3,842
16.08.2011, 14:07     Копирование файлов #21
Цитата Сообщение от -=ЮрА=- Посмотреть сообщение
вбить CopyFile и всё
Ага и быть привязаным к ОС
-=ЮрА=-
Заблокирован
Автор FAQ
16.08.2011, 14:09     Копирование файлов #22
C++
1
CopyFile(sOldPath,sNewPath,false)
- false - не падать если файл существует
asics
Freelance
Эксперт C++
2846 / 1783 / 144
Регистрация: 09.09.2010
Сообщений: 3,842
16.08.2011, 14:09     Копирование файлов #23
-=ЮрА=-, В чем профит-то ?
-=ЮрА=-
Заблокирован
Автор FAQ
16.08.2011, 14:10     Копирование файлов #24
Цитата Сообщение от asics Посмотреть сообщение
Ага и быть привязаным к ОС
- каким образом ты будешь привязан?
diagon
Higher
1927 / 1193 / 49
Регистрация: 02.05.2010
Сообщений: 2,925
Записей в блоге: 2
16.08.2011, 14:14     Копирование файлов #25
Цитата Сообщение от -=ЮрА=- Посмотреть сообщение
- false - не падать если файл существует
У boost'a третий параметр то же самое делает, только не совсем ясно, что нужно передавать...
Ну я просто сделал проверку, если файл существует, то удаляю.

Цитата Сообщение от -=ЮрА=- Посмотреть сообщение
каким образом ты будешь привязан?
Скомпилируй свой код не под виндоус, узнаешь =)
asics
Freelance
Эксперт C++
2846 / 1783 / 144
Регистрация: 09.09.2010
Сообщений: 3,842
16.08.2011, 14:15     Копирование файлов #26
-=ЮрА=-,
CopyFile - WinAPI(only Win)
boost::copy_file - crossplatform

Добавлено через 1 минуту
Цитата Сообщение от -=ЮрА=- Посмотреть сообщение
каким образом ты будешь привязан
Я как раз-то не буду, может ты будешь...
-=ЮрА=-
Заблокирован
Автор FAQ
16.08.2011, 14:17     Копирование файлов #27
Цитата Сообщение от asics Посмотреть сообщение
CopyFile - WinAPI(only Win)
boost::copy_file - crossplatform
- да а экзешник с винды разбежиться и заработает на линуксе)))Я написал что использовать CopyFile или же boost::copy_file - вообще не по заданию будет использовать, вот и всё
asics
Freelance
Эксперт C++
2846 / 1783 / 144
Регистрация: 09.09.2010
Сообщений: 3,842
16.08.2011, 14:18     Копирование файлов #28
Цитата Сообщение от -=ЮрА=- Посмотреть сообщение
- да а экзешник с винды разбежиться и заработает на линуксе
Омг, ты не выкупаешь, речь идет об переносимости кода.
diagon
Higher
1927 / 1193 / 49
Регистрация: 02.05.2010
Сообщений: 2,925
Записей в блоге: 2
16.08.2011, 14:23     Копирование файлов #29
Еще переносимый вариантик, по идее файл читается сначала в буфер.
Если нет - можно перегнать в sstream, и инициализировать этим sstream'ом string.
C++
1
2
3
4
5
#include <fstream>
int main(){
    std::ifstream in("input.txt");
    std::ofstream("output.txt") << in.rdbuf();
}
co6ak
Кошковед
407 / 500 / 29
Регистрация: 12.04.2010
Сообщений: 1,392
16.08.2011, 14:43  [ТС]     Копирование файлов #30
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
FILE *src;
    size_t result;
 
    src = fopen(srcName.c_str(), "r");
    if( !src )
    {
        printf("Cannot open file. Is it exist?=====================");
        printf(srcName.c_str());
        printf("===================================================");
 
        return false;
    }
    fseek( src, 0, SEEK_END );
    long file_size = ftell( src );
    unsigned char *buf = new unsigned char [file_size];
    if (buf==NULL){
        return false;
    }
 
    fseek ( src , 0, SEEK_SET );
 
    result = fread (buf, 1, file_size, src);
    if (result!=file_size) perror("error");
    fclose(src);
подаю файл 4 метра с лишним. result = 800 o_O
подаю файл 5.5 метров, result = 926 o_O

для маленьких файлов работает без проблем вобще
OstapBender
583 / 521 / 35
Регистрация: 22.03.2011
Сообщений: 1,585
16.08.2011, 15:45     Копирование файлов #31
так вродь уже запостили блоками по 512
C
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
int main()
{
 
    FILE * from = fopen("qt45x.djvu","rb");
    FILE * to = fopen("1.djvu","wb");
 
    char buf[BUFSIZ];
 
    size_t res=0;
 
    while ((res=fread(buf,sizeof(char),BUFSIZ,from))!=0) {
        fwrite(buf,sizeof(char),res,to);
    }
    puts("Succeed.");
 
    return 0;
}
книжку djvu 67 мб без потерь копирнул

Цитата Сообщение от co6ak Посмотреть сообщение
src = fopen(srcName.c_str(), "r");
rb надо открывать. да и зачем мешать std::string к программе на С ?
talis
791 / 543 / 37
Регистрация: 11.05.2010
Сообщений: 1,298
Записей в блоге: 1
16.08.2011, 15:57     Копирование файлов #32
Цитата Сообщение от -=ЮрА=- Посмотреть сообщение
тут не хватает Dispatch и Translate Messages - чтобі избежать зависания программы при копировании, ну это как рекомендации...


-=ЮрА=-, вы про не-виндоус слышали? Linux, BSD там... Да Макинтош в конце концов. И вообще, зависания не будет, не будет просто вывода. Хотите вывод - делайте полоску прогресса, выносите её в соседний поток (чтобы вывод не тормозил копирование), и будет вам счастье. И вообще, зачем утилите командной строки обрабатывать оконные сообщения?

Цитата Сообщение от co6ak
C
1
2
3
result = fread (buf, 1, file_size, src);
    if (result!=file_size) perror("error");
    fclose(src);
Собак, не копируйте много информации за раз, вам уже говорили. Посмотрите, как это делается тут или постом раньше (-=ЮрА=-).
co6ak
Кошковед
407 / 500 / 29
Регистрация: 12.04.2010
Сообщений: 1,392
16.08.2011, 16:03  [ТС]     Копирование файлов #33
Информация передается во встроенную ф-ию либы libssh, и уже там разбивается по блокам.
проблема была в исполняемых файлах. вЕндуз требует флаг "rb". линух этот флаг игнорирует.

Добавлено через 1 минуту
не могу передавать блоками, т.к. эта сраная либа будет перезаписывать файл, а не добавлять к нему.
talis
791 / 543 / 37
Регистрация: 11.05.2010
Сообщений: 1,298
Записей в блоге: 1
16.08.2011, 16:08     Копирование файлов #34
Цитата Сообщение от co6ak Посмотреть сообщение
вЕндуз требует флаг "rb". линух этот флаг игнорирует.
co6ak, не, ну пардон, а я как делал?


Цитата Сообщение от co6ak Посмотреть сообщение
не могу передавать блоками, т.к. эта сраная либа будет перезаписывать файл, а не добавлять к нему.
fopen [reference]

Чтобы открыть с дописыванием, вместо "wb" пишите "ab". И вообще, хотите libssh - юзайте её. Только на том конце создайте сервер/клиент-приёмник, с которым по ssh устанавливайте соединение, и который будет писать выходной файл, и передавайте блоками.

Добавлено через 2 минуты
http://api.libssh.org/master/libssh_tutor_sftp.html
co6ak
Кошковед
407 / 500 / 29
Регистрация: 12.04.2010
Сообщений: 1,392
16.08.2011, 16:15  [ТС]     Копирование файлов #35
как-бэ сказать...
это невозможно.

не потому, что я не умею (а я не умею), а потому, что просто запрещено так делать!!
talis
791 / 543 / 37
Регистрация: 11.05.2010
Сообщений: 1,298
Записей в блоге: 1
16.08.2011, 16:17     Копирование файлов #36
co6ak, поймите, это бред - загружать образ диска 7 Гб в оперативку, а потом пересылать это по сетке как есть. Как поставлена задача?
co6ak
Кошковед
407 / 500 / 29
Регистрация: 12.04.2010
Сообщений: 1,392
16.08.2011, 16:19  [ТС]     Копирование файлов #37
неужели я где-то опечатался, и написал "гб" вместо "метров" ?
на коммуникаторе ПЗУ то меньше в 2 раза, какая там нах оперативка.


Задача: написать инсталлятор с минимумом настроект (выбор должностного лица на форме, версия прошивки). подключение - ssh. выполнение команд, заливка файлов, резервное копирование, тестирование, сообщение об ошибках.
talis
791 / 543 / 37
Регистрация: 11.05.2010
Сообщений: 1,298
Записей в блоге: 1
16.08.2011, 16:22     Копирование файлов #38
co6ak, тогда понятно Но всё равно, 200 метров - это тоже расточительство. Жалко, что SFTP запрещён. Хорошо бы было.
co6ak
Кошковед
407 / 500 / 29
Регистрация: 12.04.2010
Сообщений: 1,392
16.08.2011, 16:23  [ТС]     Копирование файлов #39
да там максимальный - 8 метров файл. самый большой
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
16.08.2011, 17:51     Копирование файлов
Еще ссылки по теме:

Копирование данных из файлов в файл - C++
Привет, ребята! :) Мне необходимо написать программу, которая открывает потоки для чтения для двух файлов, и поток для записи - для одного....

Написать программу: копирование файлов - C++
Пожалуйста, помогите написать программу, копирующую один файл в другой. Имена файлов программа должна получать из командной строки.Если не...

Копирование файлов через сравнение - C++
Сравнить два каталога разницу записать в третий. В третий каталог нужно положить все файлы, которые есть в первом каталоге , но...

Копирование файлов в папку по условию - C++
Дано два каталога(dir1, dir2), содержащих файлы *.txt и не содержащие подкаталогов. Наполнить третий каталог (RESULT): -для каждого...

Копирование файлов без win api - C++
Добрый день. Что прошу: Мне нужно выполнить копирование моего (ехе) в определенные директории - папки. Мне подсказали что можно...


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

Или воспользуйтесь поиском по форуму:
fasked
16.08.2011, 17:51     Копирование файлов
  #40
 Комментарий модератора 
Кто продолжит срач на темы переносимости кода или соответствующих разделов форума получит карточку
Yandex
Объявления
16.08.2011, 17:51     Копирование файлов
Ответ Создать тему
Опции темы

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