|
|
|
| Подскажите символ конца файла пожалуйста ! Проблема в том, что при копировании файла в двоичном режиме по 128 байт за цикл (цикл условлен .eof() ) файл копируется нормально, но в конец дописываются почему-то 12 лишних нулевых байта (файл весит больше 50мб). Хоть они и нулевые, но это файл прошивки для коммуникатора, так что точность нужна 100%-я. Так вот хочу после прохода цикла сделать seekp(length, ios_base::beg) и записать тупо символ конца файла (length исходного файла перед копированием определяется правильно). ЗЫ: Идти шагом по 1 байту вместо 128 не выход, ибо 55мб таким образом копируются почти минуту. | |
|
|
|
|
|
|
|
для: DDK
(04.03.2007 в 23:57)
| | >> ..хочу после прохода цикла сделать seekp(length, ios_base::beg) и записать тупо символ конца файла
Вряд-ли это будет правильно. Приведите текст функции копирования, найдем ошибку.
Если программа под Windows, то рекомендую воспользоваться CopyFile или CopyFileEx -
работать будет максимально быстро. | |
|
|
|
|
|
|
|
для: oleg_alexeev
(05.03.2007 в 08:25)
| |
fstream inputromfile(filepath.c_str(), ios::in|ios::binary);
SetCurrentDirectory(RTC.defworkdir.c_str());
fstream tempromfile("temp.rom", ios::out|ios::in|ios::binary|ios::trunc);
SetFileAttributes("temp.rom", FILE_ATTRIBUTE_HIDDEN);
int i = 0, length, pbarstep;
char * buffer = new char[128];
inputromfile.seekg(0, ios_base::end);
length = inputromfile.tellg();
inputromfile.seekg(0, ios_base::beg);
pbarstep = length / 128 / 100;
MainForm->ProgressBar1->Visible = true;
while(!inputromfile.eof()) {
if(i%pbarstep == 0)
{
MainForm->ProgressBar1->Position += 1;
}
inputromfile.read(buffer, 128);
tempromfile.write(buffer, 128);
i+=128;
}
inputromfile.close();
tempromfile.close();
|
Как видно, копирование завязано с прогрессбаром... а у функции CopyFile нет Callback-части случайно на этот случай ? | |
|
|
|
|
|
|
|
для: DDK
(05.03.2007 в 08:42)
| | А, всё, сапасибо, нашел :) http://vsokovikov.narod.ru/Msdn_api/Global_SDK/Reference_API/Functions/Fn_C/fn_copyfileex.htm
Но всё же интересно, в чем ошибка моего кода ? | |
|
|
|
|
|
|
|
для: DDK
(05.03.2007 в 08:42)
| | У CopyFileEx есть callback и возможность прервать копирование.
А ошибка очевидна - вы пишете в выходной файл всегда 128 байт, а надо писать столько, сколько
прочиталось функцией read. Это число возвращается методом gcount.
tempromfile.write(buffer, inputromfile.gcount());
|
| |
|
|
|
|
|
|
|
для: oleg_alexeev
(05.03.2007 в 08:52)
| | Привычки простоты PHP :) | |
|
|
|