Это русская секция форума wxWidjets. В этой секции вы можете обсуждать любые вопросы, связанные с wxWidgets на вашем родном языке.
borr_1
Super wx Problem Solver
Posts: 362 Joined: Wed Mar 07, 2007 8:10 am
Location: Russia, Shakhty
Post
by borr_1 » Sat Jan 21, 2012 8:51 am
Как можно из wxInputStream дописывать в конец ф-ла по кускам не зная изначально конечный размер ф-ла и что делать если последний кусок выйдет меньше размером, чем 128?
Code: Select all
wxInputStream *in = ftp.GetInputStream(file);
if( !in ){
wxMessageBox(wxT("Не могу открыть файл"));
return;
} else{
char *data = new char[ 128 ];
wxFile file_on_disk;
int t=0;
do{
in->Read( data, 128 ).LastRead();
if(t == 0)
file_on_disk.Create(file);
else
file_on_disk.Open(file);
file_on_disk.Seek(t);
file_on_disk.Write(data, 128);
file_on_disk.Close();
t += 128;
// next 128 bytes are now in the buffer
// ... do something ...//ха-ха
} while( in->LastRead() != 0 );
delete [] data;
}
delete in;
WinXP SP3, wx-2.8.10, MinGW-4.4.1, gdb-7.1.2, eclipse
borr_1
Super wx Problem Solver
Posts: 362 Joined: Wed Mar 07, 2007 8:10 am
Location: Russia, Shakhty
Post
by borr_1 » Sat Jan 21, 2012 10:34 am
Как-то так вышло
Code: Select all
wxString file = ftplite::FTPFileLoad;
wxInputStream *in = ftp.GetInputStream(file);
if( !in ){
wxMessageBox(wxT("Не могу открыть файл"));
return;
} else{
char *data = new char[ 4096 ];
wxFile file_on_disk;
wxLogDebug(wxT("Создали пустышку"));
wxFileOffset iWritebytes = 0;
wxFileOffset iReadbytes = 0;
file_on_disk.Create(file);
do{
iWritebytes = in->Read( data, sizeof(data) ).LastRead();
iReadbytes += iWritebytes;
while(iWritebytes > 0)
iWritebytes -= file_on_disk.Write(data,
iWritebytes);
} while( in->LastRead() != 0 );
file_on_disk.Close();
delete [] data;
}
delete in;
WinXP SP3, wx-2.8.10, MinGW-4.4.1, gdb-7.1.2, eclipse