IOstream Library
От: Аноним  
Дата: 13.02.08 21:20
Оценка:
Можно ли обрезать файл при помощи IOstream библиотеки, если да то как?
Re: IOstream Library
От: pvirk Россия  
Дата: 14.02.08 09:04
Оценка:
Здравствуйте, Аноним, Вы писали:

А>Можно ли обрезать файл при помощи IOstream библиотеки, если да то как?


Если под этим понимаются обычные средства C++, то считать файл, отрезать нужный кусок и записать заново, что то типа такого:

#include <iostream>
#include <sstream>

//читаем весь файл в строку
std::fstream file_in;
file_in.open("test.txt",std::ios_base::in | std::ios_base::binary);
std::ostringstream out;  
out << file_in.rdbuf();
file_in.close();

//пишем в новый (или в тот же самый)
std::fstream file_out;
file_out.open("test2.txt",std::ios_base::out | std::ios_base::binary | std::ios_base::trunc);
file_out << out.str().substr(0,out.str().size()/2); // здесь нужный кусок отрезать
file_out.close();
Re[2]: IOstream Library
От: Аноним  
Дата: 14.02.08 10:39
Оценка:
Здравствуйте, pvirk, Вы писали:

А>>Можно ли обрезать файл при помощи IOstream библиотеки, если да то как?


P>Если под этим понимаются обычные средства C++, то считать файл, отрезать нужный кусок и записать заново, что то типа такого:


P>
P>#include <iostream>
P>#include <sstream>

P>//читаем весь файл в строку
P>std::fstream file_in;
P>file_in.open("test.txt",std::ios_base::in | std::ios_base::binary);
P>std::ostringstream out;  
P>out << file_in.rdbuf();
P>file_in.close();

P>//пишем в новый (или в тот же самый)
P>std::fstream file_out;
P>file_out.open("test2.txt",std::ios_base::out | std::ios_base::binary | std::ios_base::trunc);
P>file_out << out.str().substr(0,out.str().size()/2); // здесь нужный кусок отрезать
P>file_out.close();
P>


А что бы без перезаписи никак? Т.к. файл объемный по размеру.
Что то на подобе вот такого, только через апишные ф-ции:

hfile=CreateFile(path,GENERIC_WRITE,0,0,OPEN_EXISTING,FILE_ATTRIBUTE_NORMAL,0);
SetFilePointer(hfile,0-(int)sizeof(какаято структура),0,FILE_END);//устанавливает файловый указатель спозиционированный на начало последней записи
SetEndOfFile(hfile);
Re[3]: IOstream Library
От: Кодт Россия  
Дата: 14.02.08 13:24
Оценка:
Здравствуйте, <Аноним>, Вы писали:

А>А что бы без перезаписи никак? Т.к. файл объемный по размеру.

А>Что то на подобе вот такого, только через апишные ф-ции:

Ни STL, ни CRT не умеют обкусывать файлы. Это нужно брать какую-нибудь (кроссплатформенную) библиотеку, обращающуюся к соответствующим POSIX- или WinAPI-функциям (ftruncate и SetEndOfFile).
boost/filesystem, насколько я понимаю, это тоже не умеет.
... << RSDN@Home 1.2.0 alpha rev. 655>>
Перекуём баги на фичи!
Re[4]: IOstream Library
От: Shad0w Украина  
Дата: 14.02.08 19:40
Оценка:
Здравствуйте, Кодт, Вы писали:

К>Здравствуйте, <Аноним>, Вы писали:


А>>А что бы без перезаписи никак? Т.к. файл объемный по размеру.

А>>Что то на подобе вот такого, только через апишные ф-ции:

К>Ни STL, ни CRT не умеют обкусывать файлы. Это нужно брать какую-нибудь (кроссплатформенную) библиотеку, обращающуюся к соответствующим POSIX- или WinAPI-функциям (ftruncate и SetEndOfFile).

К>boost/filesystem, насколько я понимаю, это тоже не умеет.

Ну что ж прийдется апишными...
Спасибо.
 
Подождите ...
Wait...
Пока на собственное сообщение не было ответов, его можно удалить.