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! ----------------------------------
Không chỉ dừng lại ở việc sử dụng nguyên liệu cao cấp, mỗi công trình còn được "chăm sóc" bằng 4 dịch vụ xuất sắc của Tre Nghệ. Từ việc tư vấn, thiết kế đến thi công và hoàn thiện, mọi quy trình đều...
Chất Lượng và Sáng Tạo: Kiến Trúc...