Перейти к содержимому

Фото
- - - - -

[C++] потоки


  • Вы не можете создать новую тему
  • Please log in to reply
5 ответов в этой теме

#1 libricon

libricon
  • Постоялец
  • 572 сообщений
  • Откуда:Маарду

Отправлено 16 января 2005 - 16:29

вот написал программу, функция должна копировать один файл в другой, но она этого не делает, копирует один символ, в чем ошибка , подскажите. Все компилируется

int coding()
{
fstream file1(inputfile, ios::in); //исходный файл
fstream file2(outputfile, ios::out); // конечный файл

if(!file1.is_open() || !file2.is_open())
{
cout << " Ошибка !!/n"
<<"Не могу открать файлэ\n";
exit(1);
}
//буффер для данных и индекс положения
char buffer;
int index1=0;
int index2=0;

file1.seekg(0, ios::beg);
file2.seekp(0, ios::beg);

file1.read(&buffer, 1);
while(file1.good() && file2.good())
{
file2.write(&buffer,1);
index1++;
index2++;
file1.seekp(index1);
file2.seekg(index2);

file1.read(&buffer,1);

cout<<" записал \n";
}

file1.close();
file2.close();
}
  • 0
Пингвин птица гордая, пока не пнешь, не полетит!!!

#2 Kefir

Kefir
  • Пользователь
  • 28 сообщений
  • Откуда:Таллинн

Отправлено 16 января 2005 - 20:10

fstream file1(inputfile, ios::in);
fstream file2(outputfile, ios::out);
char buf;
while(!file1.eof())
{
    file1 >> buf;
    file2 << buf;
}
file1.close();
file2.close();

а так не проходит? а то чёто так сложно у тебя всё.
  • 0

#3 libricon

libricon
  • Постоялец
  • 572 сообщений
  • Откуда:Маарду

Отправлено 17 января 2005 - 15:04

мне надо что-б именно таким способом, я хочу записать первый файл во второй в обратном порядке, а не получается,так что только посимвольно и с функцией seekp seekg. Где ошибка, почему он только один символ переписывает?
  • 0
Пингвин птица гордая, пока не пнешь, не полетит!!!

#4 libricon

libricon
  • Постоялец
  • 572 сообщений
  • Откуда:Маарду

Отправлено 17 января 2005 - 16:14

а вот твой способ работает, только он почемуто все пробелы и пропуски потерял!

нашел ошибку, тама seekp и seekg местами перепутаны
  • 0
Пингвин птица гордая, пока не пнешь, не полетит!!!

#5 libricon

libricon
  • Постоялец
  • 572 сообщений
  • Откуда:Маарду

Отправлено 17 января 2005 - 20:27

вот, заработала как надо, если есть придирки к коду, жду.
ifstream file1(inputfile,ios::in | ios::binary);
	ofstream file2(outputfile,ios::out | ios::binary);
	int n1;
	n1 = file1.tellg();
	file1.seekg (0,ios::end);
	int n2;
	n2 = file1.tellg();
	
	int size = n2-n1;
	cout<<"Размер файла :"<<size<<endl;
	int index1=0;
	int index2=size;
	file1.seekg(0, ios::beg);
	file2.seekp(size, ios::beg);
	char buffer;
	
	file1.read(&buffer, 1);	
	while (file1.good())
  {
  file2.write(&buffer, 1);
  index1++;
  index2--;
  file1.seekg(index1, ios::beg);
    file2.seekp(index2, ios::beg);
  file1.read(&buffer, 1);
    }
   file1.close();
	file2.close();


и еще такой вопросик, почему агрумент m не работает?
int next_option;
	const char* const short_options = "i:o:m:h";
	const struct option long_options[] = {
	{"input", 1, NULL, 'i'},
	{"output", 1, NULL,'o'},
	{"mode",1, NULL, 'm'},
	{"help",0, NULL, 'h'},
	{NULL, 0, NULL, 0},
	};
	
	do {
	next_option = getopt_long (argc, argv, short_options, long_options,NULL);
	switch (next_option)
	{
   
   case 'i':
     inputfile = optarg;
   break;
   case 'o':
     outputfile = optarg;
   break;
   case 'm':
     mode = optarg;
   break;
   case 'h':
     print_usage (stdout, 0);
   case '?':
     print_usage (stderr, 1);
   case -1:
     break;
	}
	} while (next_option != -1);

  • 0
Пингвин птица гордая, пока не пнешь, не полетит!!!

#6 Kefir

Kefir
  • Пользователь
  • 28 сообщений
  • Откуда:Таллинн

Отправлено 17 января 2005 - 23:05

а вот твой способ работает, только он почемуто все пробелы и пропуски потерял!

да, точно, забыл, там дописать надо перед копированием:
cin>>resetiosflags(ios::skipws);
ну или что-то в этом роде...
на остальное нет времени ответить
  • 0