2015-10-08 60 views
1

這是很多,我知道;試圖在工作中挖出自己的洞。如何通過多個UNC路徑搜索部分文件

基本上,我有很多文件跨多臺服務器,我需要持有。現在我遇到了兩個問題,1)我找不到通過多個UNC路徑搜索的最佳方式。 2)我不得不使用部分名稱進行搜索,可能有多個文件匹配,但我只想使用過去三天創建的文件。

這是我的代碼到目前爲止。我不想找人寫信,但我會很感激任何後勤指示。

 uncPath1 = "\\server\share\"; 
     string partial = "2002265467"; 
     DateTime date = Convert.ToDateTime("10/5/2015"); 

     DirectoryInfo a = new DirectoryInfo(uncPath1); 
     FileInfo[] interactionlist = a.GetFiles("*" + partial + "*.*", SearchOption.AllDirectories); 

     foreach (FileInfo f in interactionlist) 
     { 
      string fullname = f.FullName; 

      Console.WriteLine(fullname); 
      Console.Read(); 
     } 

回答

0

1)你想做一個基本的函數來查找單個文件夾中的filespec。您已經在上面的代碼中編寫了該代碼,只需將其轉換爲具有參數UNC路徑和文件規範的函數即可。使用列表<FileInfo>的第三個參數添加找到的文件。

2)如果您需要搜索子文件夾,請創建一個函數,通過調用您在#1中編寫的函數來搜索UNC路徑的子文件夾,然後獲取所有文件夾的列表,併爲找到的每個文件夾調用自身這些調用將會調用子子文件夾等)。這稱爲遞歸。讓這個函數接受一個List並將所有找到的文件添加到List中,並將它傳遞給你的#1函數。

3)獲取要搜索到的List或Array的根UNC路徑,然後調用foreach,將它們傳遞給filespec,並將內置的空List傳遞給#2函數。

所以:

bool FindFiles(string uncPath, string fileSpec, List<FileInfo> found); 
bool FildFilesSubfolders(string uncPath, string fileSpec, List<FileInfo> found); 

string fileSpec = "whatever"; 
string[] uncPaths = { "abc", "def" }; // etc 
List<FileInfo> found = new List<FileInfo>(); 
foreach (string nextPath in uncPaths) 
{ 
    if (FindFilesSubfolders(nextPath, fileSpec, found)) 
     break; 
} 

foreach (FileInfo f in found) 
{ 
    string fullname = f.FullName; 
    Console.WriteLine(fullname); 
    Console.Read(); 
} 

最終的一個想法:如果您正在搜索子目錄和你擔心約兩UNC路徑是基本上覆制(例如c:\ foo和C:\ FOO \ foo2的)您可以使用This method檢查另一個路徑中的路徑。

編輯:如果你發現你正在尋找的東西,並需要提前退出,有函數返回一個布爾值,這意味着你找到你想要的東西,以提前停止。然後在你的循環中使用break。我編輯了代碼。

+0

嗨版,非常感謝你對你的幫助,我們對此深感抱歉,昨晚沒有迴應,我就下線了理智的清酒。我確實嘗試了積極迴應,但它說我不能贏得15點聲望。 我已經實施了你的建議,並且..工作!非常感謝。我想知道你是否可以再幫忙一次?如果找到文件,「退出」搜索uncPaths的最佳方法是什麼?我有四個,搜索全部都是耗時的。 – jPol34

+0

@ jPol34,使用查找函數的返回碼,並在真正的返回中斷開循環(或在發現任何內容時在原始函數中)。我上面做了一個編輯。 –

1

您提到您只需查找過去3天內製作的文件。代替使用Convert.ToDateTime並對日期進行硬編碼,您應該使用DateTime.Today.AddDays(-3)來獲取程序運行日期前三天的日期。

當然,在你找到文件的方法,用類似比較的日期:

DateTime time = DateTime.Today.AddDays(-3); 
if (File.GetCreationTime(filePath) > time) { 
    // Add the file 
} 
+1

這工作。非常感謝你。 – jPol34