<rt id="bn8ez"></rt>
<label id="bn8ez"></label>

  • <span id="bn8ez"></span>

    <label id="bn8ez"><meter id="bn8ez"></meter></label>

    隨筆 - 6  文章 - 129  trackbacks - 0
    <2025年5月>
    27282930123
    45678910
    11121314151617
    18192021222324
    25262728293031
    1234567

    常用鏈接

    留言簿(14)

    隨筆檔案(6)

    文章分類(467)

    文章檔案(423)

    相冊

    收藏夾(18)

    JAVA

    搜索

    •  

    積分與排名

    • 積分 - 826309
    • 排名 - 49

    最新評論

    閱讀排行榜

    評論排行榜

    Delphi中關于文件、目錄操作的函數 



    來源:大富翁



    關于文件、目錄操作



    Chdir('c:\abcdir'); // 轉到目錄

    Mkdir('dirname'); //建立目錄

    DirectoryExists('dirname') //判斷目錄是否存在

    Rmdir('dirname'); //刪除目錄(目錄不存在會報異常)

    GetCurrentDir; //取當前目錄名,無'\'

    Getdir(0,s); //取工作目錄名s:='c:\abcdir';

    Deletfile('abc.txt'); //刪除文件

    Renamefile('old.txt','new.txt'); //文件更名

    ExtractFilename(filelistbox1.filename); //取文件名

    ExtractFileExt(filelistbox1.filename); //取文件后綴





    目錄處理函數三則:DelTree,XCopy,Move



    private

    { Private declarations }

    procedure _XCopy(ASourceDir:String; ADestDir:String);

    procedure _Move(ASourceDir:String; ADestDir:String);

    procedure _DelTree(ASourceDir:String);



    //----------------------------------------------------------

    procedure TForm1._XCopy(ASourceDir:String; ADestDir:String);

    var

    FileRec:TSearchrec;

    Sour:String;

    Dest:String;

    begin

    Sour:=ASourceDir;

    Dest:=ADestDir;



    if Sour[Length(Sour)]<>'\' then Sour := Sour + '\';

    if Dest[Length(Dest)]<>'\' then Dest := Dest + '\';



    if not DirectoryExists(ASourceDir) then

    begin

    ShowMessage('來源目錄不存在!!');

    exit;

    end;



    if not DirectoryExists(ADestDir) then

    begin

    ForceDirectories(ADestDir);

    end;



    if FindFirst(Sour+'*.*',faAnyfile,FileRec) = 0 then

    repeat

    if ((FileRec.Attr and faDirectory) <> 0) then

    begin

    if (FileRec.Name<>'.') and (FileRec.Name<>'..') then

    begin

    _XCopy(Sour+FileRec.Name,Dest+FileRec.Name);

    end;

    end

    else

    begin

    CopyFile(PChar(Sour+FileRec.Name),PChar(Dest+FileRec.Name),false);

    end;

    until FindNext(FileRec)<>0;



    FindClose(FileRec);



    end;

    //------------------------------------------------------------------

    procedure TForm1._Move(ASourceDir:String; ADestDir:String);

    var

    FileRec:TSearchrec;

    Sour:String;

    Dest:String;

    begin

    Sour:=ASourceDir;

    Dest:=ADestDir;



    if Sour[Length(Sour)]<>'\' then Sour := Sour + '\';

    if Dest[Length(Dest)]<>'\' then Dest := Dest + '\';



    if not DirectoryExists(ASourceDir) then

    begin

    ShowMessage('來源目錄不存在!!');

    exit;

    end;



    if not DirectoryExists(ADestDir) then

    begin

    ForceDirectories(ADestDir);

    end;



    if FindFirst(Sour+'*.*',faAnyfile,FileRec) = 0 then

    repeat

    if ((FileRec.Attr and faDirectory) <> 0) then

    begin

    if (FileRec.Name<>'.') and (FileRec.Name<>'..') then

    begin

    _XCopy(Sour+FileRec.Name,Dest+FileRec.Name);



    _DelTree(Sour+FileRec.Name);



    FileSetAttr(Sour+FileRec.Name,faArchive);

    RemoveDir(Sour+FileRec.Name);

    end;

    end

    else

    begin

    CopyFile(PChar(Sour+FileRec.Name),PChar(Dest+FileRec.Name),false);



    FileSetAttr(Sour+FileRec.Name,faArchive);

    deletefile(Sour+FileRec.Name);

    end;

    until FindNext(FileRec)<>0;



    FindClose(FileRec);



    FileSetAttr(Sour,faArchive);

    RemoveDir(Sour);



    end;

    //-----------------------------------------------------------

    procedure TForm1._DelTree(ASourceDir:String);

    var

    FileRec:TSearchrec;

    Sour:String;

    begin

    Sour:=ASourceDir;

    if Sour[Length(Sour)]<>'\' then Sour := Sour + '\';



    if not DirectoryExists(ASourceDir) then

    begin

    ShowMessage('來源目錄不存在!!');

    exit;

    end;



    if FindFirst(Sour+'*.*',faAnyfile,FileRec) = 0 then

    repeat

    //if (FileRec.Attr = faDirectory) then

    if ((FileRec.Attr and faDirectory) <> 0) then

    begin

    if (FileRec.Name<>'.') and (FileRec.Name<>'..') then

    begin

    _DelTree(Sour+FileRec.Name);



    FileSetAttr(Sour+FileRec.Name,faArchive);

    RemoveDir(Sour+FileRec.Name);

    end;

    end

    else

    begin

    FileSetAttr(Sour+FileRec.Name,faArchive);

    deletefile(Sour+FileRec.Name);

    end;

    until FindNext(FileRec)<>0;



    FindClose(FileRec);



    FileSetAttr(Sour,faArchive);

    RemoveDir(Sour);



    end;





    利用遞歸實現刪除某一目錄下所有文件



    var Form1: TForm1;

    rec_stack:array [1..30] of TSearchRec;

    rec_pointer:integer;

    Del_Flag:Boolean;

    ---------------------------------------------------------------

    procedure TForm1.DeleteTree(s:string);

    VAR searchRec:TSearchRec;

    begin

    if FindFirst(s+'\*.*', faAnyFile, SearchRec)=0 then

    repeat

    if (SearchRec.Name<>'.') and (SearchRec.Name<>'..') then

    begin

    if (SearchRec.Attr and faDirectory>0) then

    begin

    rec_stack[rec_pointer]:=SearchRec;

    rec_pointer:=rec_pointer-1;

    DeleteTree(s+'\'+SearchRec.Name);

    rec_pointer:=rec_pointer+1;

    SearchRec:=rec_stack[rec_pointer];

    end

    else

    begin

    try

    FileSetAttr(s+'\'+SearchRec.Name,faArchive);

    DeleteFile(s+'\'+SearchRec.Name);

    except

    Application.MessageBox(PChar('Delete file:'+s+'\'+SearchRec.Name+' Error!'),'Info',MB_OK);

    Del_Flag:=False;

    end;

    end;

    end;

    until (FindNext(SearchRec)<>0);

    FindClose(SearchRec);

    if rec_pointer<30 then

    begin

    try

    FileSetAttr(s,faArchive);

    RemoveDir(s);

    except

    Application.MessageBox(PChar('Delete Directory:'+s+' Error!'),'Info',MB_OK);

    Del_Flag:=False;

    end;

    end;

    end;

    ---------------------------------------------------------

    Del_Flag:=True;

    rec_pointer:=30;

    DeleteTree('c:\temp');

    if Del_Flag then Application.MessageBox(PChar('目錄c:\temp的內容已成功清除!'),'信息',MB_OK);





    輕輕松松查找文件

    在平常的編程當中,經常會碰到查找某一個目錄下某一類文件或者所有文件的問題,為了適應不同的需要,我們經常不得不編寫大量的類似的代碼,有沒有可能寫一個通用的查找文件的程序,找到一個文件后就進行處理的呢?這樣我們只要編寫處理文件的部分就可以了,不需要編寫查找文件的部分!答案是肯定的。下面的這個程序就能實現這個功能!

    //說明:

    //TFindCallBack為回調函數,FindFile函數找到一個匹配的文件之后就會調用這個函數。

    //TFindCallBack的第一個參數找到的文件名,你在回調函數中可以根據文件名進行操作。

    //TFindCallBack的第二個參數為找到的文件的記錄信息,是一個TSearchRec結構。

    //TFindCallBack的第三、四個參數分別為決定是否終止文件的查找,臨時決定是否查找某個子目錄!

    //FindFile的參數:

    //第一個決定是否退出查找,應該初始化為false;

    //第二個為要查找路徑;

    //第三個為文件名,可以包含Windows所支持的任何通配符的格式;默認所有的文件

    //第四個為回調函數,默認為空

    //第五個決定是否查找子目錄,默認為查找子目錄

    //第六個決定是否在查找文件的時候處理其他的消息,默認為處理其他的消息

    //若有意見和建議請E_Mail:Kingron@163.net





    type

    TFindCallBack=procedure (const filename:string;const info:TSearchRec;var bQuit,bSub:boolean);



    procedure FindFile(var quit:boolean;const path: String;const filename:string='*.*';

    proc:TFindCallBack=nil;bSub:boolean=true;const bMsg:boolean=true);

    var

    fpath: String;

    info: TsearchRec;



    procedure ProcessAFile;

    begin

    if (info.Name<>'.') and (info.Name<>'..') and ((info.Attr and faDirectory)<>faDirectory) then

    begin

    if assigned(proc) then

    proc(fpath+info.FindData.cFileName,info,quit,bsub);

    end;

    end;



    procedure ProcessADirectory;

    begin

    if (info.Name<>'.') and (info.Name<>'..') and ((info.attr and fadirectory)=fadirectory) then

    findfile(quit,fpath+info.Name,filename,proc,bsub,bmsg);

    end;



    begin

    if path[length(path)]<>'\' then

    fpath:=path+'\'

    else

    fpath:=path;

    try

    if 0=findfirst(fpath+filename,faanyfile and (not fadirectory),info) then

    begin

    ProcessAFile;

    while 0=findnext(info) do

    begin

    ProcessAFile;

    if bmsg then application.ProcessMessages;

    if quit then

    begin

    findclose(info);

    exit;

    end;

    end;

    end;

    finally

    findclose(info);

    end;

    try

    if bsub and (0=findfirst(fpath+'*',faanyfile,info)) then

    begin

    ProcessADirectory;

    while findnext(info)=0 do

    ProcessADirectory;

    end;

    finally

    findclose(info);

    end;

    end;

    例子:

    procedure aaa(const filename:string;const info:tsearchrec;var quit,bsub:boolean);

    begin

    form1.listbox1.Items.Add(filename);

    quit:=form1.qqq;

    bsub:=form1.checkbox1.Checked;

    end;



    procedure TForm1.Button1Click(Sender: TObject);

    begin

    listbox1.Clear;

    qqq:=false;

    button1.Enabled:=false;

    findfile(qqq,edit1.text,edit2.text,aaa,checkbox1.checked,checkbox2.checked);

    showmessage(inttostr(listbox1.items.count));

    button1.Enabled:=true;

    end;



    procedure TForm1.Button2Click(Sender: TObject);

    begin

    qqq:=true;

    end;


    posted on 2010-02-25 15:31 Ke 閱讀(990) 評論(0)  編輯  收藏 所屬分類: delphi
    主站蜘蛛池模板: 亚洲成AV人片高潮喷水| 亚洲视频一区在线观看| 最好2018中文免费视频| 国产美女无遮挡免费视频| 国产亚洲精品成人AA片| 成年轻人网站色免费看| 亚洲AV无码片一区二区三区| 毛片a级毛片免费播放下载| 精品无码专区亚洲| 国产真人无遮挡作爱免费视频| 丰满亚洲大尺度无码无码专线| 波多野结衣中文一区二区免费| 黄网站色视频免费观看45分钟| 国产亚洲一区区二区在线| a级毛片在线免费观看| 精品日韩亚洲AV无码| 无码人妻久久一区二区三区免费丨 | 国产精品国产亚洲精品看不卡| 亚欧日韩毛片在线看免费网站| 亚洲精品国产成人| 成人a视频片在线观看免费| 美景之屋4在线未删减免费| 亚洲午夜无码久久久久| 无码A级毛片免费视频内谢| 亚洲一区二区三区高清不卡 | 中文字幕无码毛片免费看| 亚洲成a人片在线观看无码| 免费下载成人电影| 免费中文字幕视频| 少妇中文字幕乱码亚洲影视| 成人毛片18女人毛片免费| 有码人妻在线免费看片| 亚洲美女大bbbbbbbbb| 国产免费69成人精品视频| 老司机精品免费视频| 亚洲午夜精品国产电影在线观看| 国产乱子伦片免费观看中字| 久9久9精品免费观看| 美女扒开尿口给男人爽免费视频| 亚洲av无码一区二区三区不卡 | 亚洲裸男gv网站|