2014-10-01 199 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') 

这将路径返回到你漫游文件夹无需硬编码的用户名。