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

Работа с файлами - C++

Восстановить пароль Регистрация
 
NEvOl
12 / 11 / 0
Регистрация: 13.08.2012
Сообщений: 616
04.11.2013, 21:16     Работа с файлами #1
Здравствуйте, суть в том что необходимо сделать что-то типо копирования произвольного файла, т.е. выбираю файл будь то изображение, документ, текстовый документ или экзашник, и он должен копироваться в папку с проектом, пробовал делать так:
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
    ifstream input;
    ofstream output;
    if(!OpenDialog1->Execute())
        return;
 
    wchar_t *FileName = OpenDialog1->FileName.c_str();  
 
    input.open(FileName, ios::binary);
    wchar_t *FileName1 = ReName(FileName);//функция просто добавляет к имени файла 1
    output.open(FileName1, ios::out);
 
 
    if(!input)
        return;
 
    if(!output)
        return;
 
     char c,b;
    while(input>>b)
    {
        c = b;
        output<<c;
    };
 
    input.close();
    output.close();
но так получается только с текстовыми, подскажите что не так ?
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
04.11.2013, 21:16     Работа с файлами
Посмотрите здесь:

C++ Работа с файлами
C++ Работа с файлами
работа с файлами C++
C++ Работа с файлами С++
работа с файлами C++
После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
egor2116
 Аватар для egor2116
337 / 368 / 42
Регистрация: 20.01.2013
Сообщений: 1,100
04.11.2013, 21:45     Работа с файлами #2
test - исполняемый фаил этой программы( в виндовсе .exe)
file.dat - бинарный файл куда перезаписываем содержимое первого

Как то так наверное

C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
ifstream in("/home/egor/CODES/test/test",ios::binary|ios::in); //Открываем файл в двоичном режиме только для чтения
ofstream out("/home/egor/CODES/test/file.dat",ios::binary|ios::out); //Открываем файл в двоичном режиме для записи
char a;
 
while(in >> a)
    out << a;
 
in.close(); //Закрываем файл
out.close(); 
 
in.open("/home/egor/CODES/test/file.dat",ios::binary|ios::in);
while(in >> a)
   cout << a; //смотрим каракули на экране(содержимое бинарного файла file.dat)
 
in.close();
NEvOl
12 / 11 / 0
Регистрация: 13.08.2012
Сообщений: 616
04.11.2013, 21:57  [ТС]     Работа с файлами #3
мне нужно что бы создавался не dat-овский файл а точно такой же какой и открыли, заметил что размеры файлов отличаются т.е. если я открыл файл изображения весом 37кб то копированный весит 36кб следовательно что-то недописывается, но я не понимаю в чем проблема.
FreeMan108
 Аватар для FreeMan108
120 / 120 / 6
Регистрация: 04.03.2013
Сообщений: 368
04.11.2013, 21:57     Работа с файлами #4
А почему бы просто не CopyFile
egor2116
 Аватар для egor2116
337 / 368 / 42
Регистрация: 20.01.2013
Сообщений: 1,100
04.11.2013, 22:02     Работа с файлами #5
не нужно что бы создавался не dat-овский файл
Это не dat фаил, это я имя придумал, я на линуксе пишу мне разрешения вообще можно не указывать, раз выполняемый фаил моей програмы называется test то пусть фаил назначения будет test1(в вашем случае например *.exe или *.txt, а адрес назначения *1.exe или *1.txt )
NEvOl
12 / 11 / 0
Регистрация: 13.08.2012
Сообщений: 616
04.11.2013, 22:11  [ТС]     Работа с файлами #6
Цитата Сообщение от FreeMan108 Посмотреть сообщение
А почему бы просто не CopyFile
спасибо но охото самому сделать, так сказать узнать в чем соль

Добавлено через 1 минуту
Цитата Сообщение от egor2116 Посмотреть сообщение
Это не dat фаил, это я имя придумал, я на линуксе пишу мне разрешения вообще можно не указывать, раз выполняемый фаил моей програмы называется test то пусть фаил назначения будет test1(в вашем случае например *.exe или *.txt, а адрес назначения *1.exe или *1.txt )
так почему-то не работает пробую пока с jpg файлами
egor2116
 Аватар для egor2116
337 / 368 / 42
Регистрация: 20.01.2013
Сообщений: 1,100
04.11.2013, 22:17     Работа с файлами #7
NEvOl, попробуйте так должно все заработать, токо свои пути поставите.
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
#include <iostream>
#include <fstream>
 
using namespace std;
 
int main(){
 
ifstream in("/home/egor/CODES/test/test",ios::binary|ios::in); //Открываем файл в двоичном режиме только для чтения
ofstream out("/home/egor/CODES/test/file.dat",ios::binary|ios::out); //Открываем файл в двоичном режиме для записи
char a;
 
while(in.get(a))
    out.put(a);
 
in.close(); //Закрываем файл
out.close(); 
 
in.open("/home/egor/CODES/test/file.dat",ios::binary|ios::in);
while(in.get(a))
    cout << a; //смотрим каракули на экране(содержимое бинарного файла file.dat)
 
in.close();
 
return 0;
}
NEvOl
12 / 11 / 0
Регистрация: 13.08.2012
Сообщений: 616
04.11.2013, 22:22  [ТС]     Работа с файлами #8
да так заработало, а почему с помощью операторов >>, << не работало ?
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
04.11.2013, 22:27     Работа с файлами
Еще ссылки по теме:

Работа с файлами C++
C++ Работа с файлами в C, C++
C++ Работа с файлами

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

Или воспользуйтесь поиском по форуму:
egor2116
 Аватар для egor2116
337 / 368 / 42
Регистрация: 20.01.2013
Сообщений: 1,100
04.11.2013, 22:27     Работа с файлами #9
да так заработало, а почему с помощью операторов >>, << не работало ?
точно не помню надо ману курить, в с++ с этими чтением и записью файлов вечный геморой 180 способов и вечно путаю, но привыкаешь
Yandex
Объявления
04.11.2013, 22:27     Работа с файлами
Ответ Создать тему
Опции темы

Текущее время: 09:43. Часовой пояс GMT +3.
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2016, vBulletin Solutions, Inc.
Рейтинг@Mail.ru