Mã:
//------------------------------------------------------------------------------------void CMySplitFileDlg::Split(CString Input,CString Output,int chunks){ CFile input,output; int FileSize,currentsize; int blocks; int ChunkSize; CString ChunkName; unsigned char data[BUFFER_SIZE]; CFileException fe; UpdateData(); //AfxMessageBox("Split to "+m_CHUNKS+" chunks); m_STATUS.Format("Split to %d chunks",chunks); UpdateData(FALSE); if(!input.Open(Input,CFile::modeRead | CFile::typeBinary,&fe)) { AfxMessageBox("Can't openfile !Maybe it's don't exist"); return; } FileSize=input.GetLength(); for (int chunk=0;chunk<chunks;chunk++) { ChunkName.Format("%s.%d",Output,chunk); if(!(output.Open( ChunkName, CFile::modeCreate | CFile::modeWrite | CFile::typeBinary, &fe ) ) ) { AfxMessageBox("File can't creat !"); /* handle the error here */ return; } if(chunk<chunks-1) { ChunkSize=FileSize/chunks; }else{ ChunkSize=FileSize/chunks+FileSize%chunks; } //Read block to block blocks=ChunkSize/BUFFER_SIZE; m_STATUS="Splitting...!"; UpdateData(FALSE); for(int i=0;i<blocks+1;i++) { if(ChunkSize-BUFFER_SIZE*i<BUFFER_SIZE) { ZeroMemory(data,BUFFER_SIZE); // Make sure leftover garbage is empty input.Read((void*)data,(ChunkSize-BUFFER_SIZE*i)); currentsize=ChunkSize-i*BUFFER_SIZE;//odd DataSize }else{ currentsize=BUFFER_SIZE; input.Read((void*)data,BUFFER_SIZE); } output.Write((void*)&data,currentsize); } output.Close(); } input.Close(); AfxMessageBox("Split completed !"); m_STATUS="Splited !"; UpdateData(FALSE);}//------------------------------------------------------------------------------------void CMySplitFileDlg::Splice(CString Input,CString Output,int chunks){ CFile input,output; int ChunkSize,currentsize; int blocks; //char filetag[] = "SmallCode_ws"; unsigned char data[BUFFER_SIZE]; CFileException fe; UpdateData(); //AfxMessageBox("Split to "+m_CHUNKS+" chunks); m_STATUS.Format("Slice from %d chunks",chunks); UpdateData(FALSE); if(!(output.Open( Output, CFile::modeCreate | CFile::modeWrite | CFile::typeBinary, &fe ) ) ) { AfxMessageBox("File can't creat !"); /* you should handle the error here */ return; } for (int chunk=0;chunk<chunks;chunk++) { CString ChunkName,temp; temp=Input.Left(Input.GetLength()-1); ChunkName.Format("%s%d",temp,chunk); if(!input.Open(ChunkName,CFile::modeRead | CFile::typeBinary,&fe)) { AfxMessageBox("Can't openfile !Maybe it's don't exist"); return; } //input.Read((void*)data,12);//remove filetag ChunkSize=input.GetLength(); blocks=ChunkSize/BUFFER_SIZE; for(int i=0;i<blocks+1;i++) { if(ChunkSize-BUFFER_SIZE*i<BUFFER_SIZE) { ZeroMemory(data,BUFFER_SIZE); // Make sure leftover garbage is empty input.Read((void*)data,(ChunkSize-BUFFER_SIZE*i)); currentsize=ChunkSize-i*BUFFER_SIZE;//odd DataSize }else{ currentsize=BUFFER_SIZE; input.Read((void*)data,BUFFER_SIZE); } output.Write((void*)data,currentsize); } input.Close(); } //Read block to block output.Close(); m_STATUS="Split completed !"; AfxMessageBox("Splice completed !"); UpdateData(FALSE); }
//----------------Have fun! ----------------------------------
Thông qua phân tích dữ liệu Google từ 86 quốc gia, mới đây, một công ty tại Anh đã công bố bảng xếp hạng kích tấc "cậu nhỏ" của các nước trên thế giới. Kết quả, hầu hết các nước xếp ở nhóm đầu của...
"Chim" của chàng trai Việt thuộc...