Page 1 of 1

wxFTP wxFile или как дописать в конец ф-ла

Posted: Sat Jan 21, 2012 8:51 am
by borr_1
Как можно из 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;

Re: wxFTP wxFile или как дописать в конец ф-ла

Posted: Sat Jan 21, 2012 10:34 am
by borr_1
Как-то так вышло

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;