請問如何改變檔案的大小 |
答題得分者是:dllee
|
jessechan
版主 發表:109 回覆:394 積分:254 註冊:2002-04-05 發送簡訊給我 |
|
dllee
站務副站長 發表:321 回覆:2519 積分:1711 註冊:2002-04-15 發送簡訊給我 |
用 TFileStream 開檔,設 Size 即可。
以下是以前寫 GigaTailDelete 的程式片斷: [code cpp] // GigaTailDelete <2003-05-06> // 用來刪除 giga 網站加料的檔案。 //----------------------------------------------------------------------------// int __fastcall TForm1::FindTailPattern(AnsiString asFile,AnsiString asPattern,int iMoreByte,bool DeleteIt) { TFileStream *stm=NULL; int iFoundLen=0; int iLen=asPattern.Length(); if (FileExists(asFile)) { try{ if(DeleteIt) stm=new TFileStream(asFile,fmOpenReadWrite); else stm=new TFileStream(asFile,fmOpenRead | fmShareDenyNone ); }catch(...){ goto __return_FindTailPattern; } if(stm->Size<(iLen iMoreByte)) goto __return_FindTailPattern; if(stm->Size<(iLen 3)) // 可能會有 0x0A 0x0D 0x00 goto __return_FindTailPattern; char buf[MAX_TAIL_SIZE 1]; for(int iOffset=0;iOffset<3;iOffset ) // 多找找後面幾個 { stm->Seek(-iLen-iOffset,soFromEnd); stm->ReadBuffer(buf,iLen); buf[iLen]='\0'; if(StrComp(buf,asPattern.c_str())==0) // FOUND { iFoundLen=iLen iOffset; if(DeleteIt) stm->Size=stm->Size-iLen-iMoreByte-iOffset; break; } } } __return_FindTailPattern: if(stm!=NULL) delete stm; return iFoundLen; } //----------------------------------------------------------------------------// [/code] ■ VMASK - ViewMove Automation Software Kernel ■ VMIO-Server/SECS/GEM ■ dllee's blog ■ dllee's StatPlus ■
------
http://www.ViewMove.com
編輯記錄
dllee 重新編輯於 2007-11-26 13:10:30, 註解 加上程式片斷‧
|
jessechan
版主 發表:109 回覆:394 積分:254 註冊:2002-04-05 發送簡訊給我 |
本站聲明 |
1. 本論壇為無營利行為之開放平台,所有文章都是由網友自行張貼,如牽涉到法律糾紛一切與本站無關。 2. 假如網友發表之內容涉及侵權,而損及您的利益,請立即通知版主刪除。 3. 請勿批評中華民國元首及政府或批評各政黨,是藍是綠本站無權干涉,但這裡不是政治性論壇! |