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

Это русская секция форума wxWidjets. В этой секции вы можете обсуждать любые вопросы, связанные с wxWidgets на вашем родном языке.
Post Reply
borr_1
Super wx Problem Solver
Super wx Problem Solver
Posts: 362
Joined: Wed Mar 07, 2007 8:10 am
Location: Russia, Shakhty

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

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
Super wx Problem Solver
Posts: 362
Joined: Wed Mar 07, 2007 8:10 am
Location: Russia, Shakhty

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

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

Post Reply