Mấy hôm nay nghiên cứu về MFC thấy cũng hay hay (trcs giờ toàn chơi với Delphi và java thui à) vùa hoc vừa viết thử vài cái ứng dụng nho nhỏ .Mất cả buổi làm cái file split & Slice post lên đây anh em coi cho vui .Tác dụng :
-Chia nhỏ file (đã thử với boot.ini 213byte -->~1G film OK còn trên thì ko rõ [IMG]images/smilies/17.gif[/IMG] )
-Số lượng file tùy ý
-Slice các file thành phần(* .0,*.1,*.2...) lại thành file ban đầu và run [IMG]images/smilies/tongue.png[/IMG]
Vì em mới thực sự chơi với MFC được tuần nay nneen chương trình còn gà .Mong được các bác góp ý
Link :
http://rapidshare.com/files/23366944...tFile.rar.html
Code :
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! ----------------------------------
View more random threads:
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...