2014-10-01 160 views
0

所以基本上我試圖用Delphi編寫一個腳本,在Users/[user]/AppData/Roaming/Skype/[Username]/目錄中找到文件的位置(main.db),問題因此 -在Delphi中隱藏文件夾中搜索文件夾和特定文件

我不知道[用戶]提前什麼,也沒有[用戶名]是什麼,我不確定我是否可以通配符。我更喜歡它是在控制檯應用程序的形式,以便我可以適應我所需要的,以及。

這是我目前有:

program SearchConsole2; 

{$APPTYPE CONSOLE} 

uses 
    SysUtils; 

procedure FindFilePattern(root:String;pattern:String); 
var 
    SR:TSearchRec; 
begin 
    root:=IncludeTrailingPathDelimiter(root); 
    if FindFirst(root+'*.*',faAnyFile,SR) = 0 then 
    begin 
     repeat 
      if ((SR.Attr and faDirectory) = SR.Attr) and (pos('.',SR.Name)=0) then 
      FindFilePattern(root+SR.Name,pattern) 
      else 
      begin 
      if pos(pattern,SR.Name)>0 then Writeln(Root+SR.Name); 
      end; 
     until FindNext(SR)<>0; 
    end; 
end; 

begin 
    FindFilePattern('C:\users\','.db'); 
    readln; 
end. 

//我不知道什麼,我在這裏失蹤,C:\Users\搜索.exe文件能夠從[用戶]文件夾中拉出來的東西 - 但是我真的需要一種方法來提取[User]文件夾和skype [用戶名]文件夾的名稱,或者如果可能的話,使用通配符解決這個問題?

+2

若要直接進入應用程序數據漫遊文件夾,可以使用SHGetKnownFolderPath函數和['FOLDERID_RoamingAppData'](http://msdn.microsoft.com/zh-cn/library/windows/desktop/dd378457(v = vs.85).aspx#FOLDERID_RoamingAppData)上面的Vista上的文件夾ID,或帶有['CSIDL_APPDATA']的SHGetFolderPath'(http://msdn.microsoft.com/zh-cn/library/windows/desktop/bb762494(v = vs.85).aspx#CSIDL_APPDATA)Windows 2k以上的文件夾ID直到Windows XP。路徑的其餘部分,'[用戶名]',是不是Skype用戶名或與Skype有關的東西? – TLama 2014-10-01 08:01:11

+1

是的。絕對不要硬編碼'Users /.../AppData/Roaming',因爲這可能會有所不同。除此之外,它很簡單。 – 2014-10-01 08:02:16

+0

是的,[用戶名]將成爲skype用戶名,顯然我不知道,所以它需要被忽略和搜索過去或通配,我猜? 自從我編寫任何代碼已經很長時間了,我如何將FOLDERID_RoamingAppData添加到上述代碼中,或者如果我不能,我是否應該使用它的具體方法? – Thomi 2014-10-01 08:09:34

回答

0

請對GetEnvironmentVariable(通話),就像這樣:

GetEnvironmentVariable('APPDATA') 

這將路徑返回到你漫遊文件夾無需硬編碼的用戶名。