2013-04-30 244 views
0

所以我有這個filenames.avi的列表。每個來自不同的目錄,路徑。我有一個列表的txt文件。如何從文件名獲取文件路徑和目錄?

當他們都在同一個文件夾中,這很容易,當我在一個文件夾中的每個文件夾中,我必須相應地更改每個文件的目錄路徑。

謝謝

+0

'System.IO.Path.GetFileName(...)' – alex 2013-04-30 09:36:35

+0

我們需要更多的細節。您想做什麼?你有什麼? .txt文件有什麼內容? – nmat 2013-04-30 09:36:39

+0

你認爲這可以做到嗎?可能有多個文件具有相同的文件名,但在不同的目錄中,您打算如何區分它們? – 2013-04-30 09:37:27

回答

5

您將要使用的System.IO.Path類。 Path.GetDirectoryName將返回目錄名稱(沒有尾隨'\'字符)。

Path類還有其他有用的方法,如GetFileNameGetExtension

+0

但那些不工作時,我只有一個文件名,似乎有一個過程之前,搜索每個文件,像@ juann說,任何想法? – TrackmeifYouCan 2013-04-30 09:44:16

+0

Path.GetDirectoryName將返回目錄的路徑,但只有當你有文件的完整路徑或相對路徑時,如果你只有文件名,你將不會得到任何東西,Path類基本上只處理提供的字符串,它不會搜索文件系統。 – 2013-04-30 09:44:20

+0

@NikolaDavidovic所以我如何有效地解決這個問題? – TrackmeifYouCan 2013-04-30 09:45:28

0

這會給你的文件名

fullPath = Path.GetFullPath(file); 
fileName = Path.GetFileName(fullPath); 

,這會給你的文件路徑

shortPath = fullPath.Substring(0, inputText.LastIndexOf("\")); 
0
var sr = new StreamReader("filelist.txt"); 
while(!sr.EOF) 
{ 
    string[] ListFiles = Directory.GetFiles("D:\movies\", 
              sr.ReadLine()/*your file name is the search pattern*/, 
              SearchOption.AllDirectories); 
    if(ListFIles.Count > 0) 
    { 
     //File Found 
     foreach(var f in ListFiles) 
     { 
      string fullPath = Path.GetFullPath(file); 
      string fileName = Path.GetFileName(fullPath); 
     } 

    } 

} 
1

您可以使用Directory.GetFiles()方法和搜索子目錄。我建議縮小搜索範圍,因爲訪問受限制的文件夾時,你會得到例外,但一般可以使用類似以下將路徑返回到文件名的第一次出現還是會迴歸的方法null

public string SearchFileSystem(string filename) 
{ 
    string [] files = null; 
    try 
    { 
     files = Directory.GetFiles("C:\\", filename, SearchOption.AllDirectories); 
    } 
    catch (Exception e) 
    { 
     MessageBox.Show(e.Message); 
    } 
    return files==null?null:files.FirstOrDefault(); 
}