2010-12-17 92 views
0

我有一個程序,可以從日誌文本文件中「查看」各種目錄路徑,並根據單詞打印各種結果。的目錄路徑C#如何從目錄路徑grep最後一個單詞?

實例:

  • C:/文件和設置/所有用戶/桌面/的AccessData FTK Imager.lnk

  • C:/文件和設置/所有用戶/開始菜單/程序/的AccessData

  • C:/ Documents和設置/管理/桌面/的AccessData FTK Imager.exe:Zone.Identifier

因此,如何在最後一個「/」後擦掉文件或文件夾名?這是爲了幫助程序識別文件和文件夾。請注意多個「。」。和在目錄路徑中找到的空格。等「Imager.exe:Zone.Identifier」。因此很難使用if(!name.contains()".")

等等如何從STRING ?!路徑中獲取「AccessData FTK Imager.lnk」或「AccessData」或「AccessData FTK Imager.exe:Zone.Identifier」。

可能有人請告訴我的方法或代碼來解決這個問題嗎?謝謝!

的代碼:

if (!token[7].Contains(".")) 
       {  

        Console.WriteLine("The path is a folder?"); 

        Console.WriteLine(token[7]); 

        Console.WriteLine(actions); 

        MacActions(actions); 

        x = 1; 
       } 

回答

1

在使用文件路徑時使用Path類,並在使用實際文件和文件夾時使用File和Directory類。

string [email protected]"C:/Documents and Settings/All Users/Desktop/AccessData FTK Imager.lnk"; 
string [email protected]"C:/Documents and Settings/All Users/Start Menu/Programs/AccessData"; 
string [email protected]"C:/Documents and Settings/Administrator/Desktop/AccessData FTK Imager.exe:Zone.Identifier"; 

Console.WriteLine(Path.GetFileName(str1)); 
Console.WriteLine(Path.GetFileName(str2)); 
Console.WriteLine(Path.GetFileName(str3)); 

輸出:

AccessData FTK Imager.lnk 
AccessData 
Zone.Identifier <-- it chokes here because of the : 

這個類的字符串操作,因爲我沒有我的系統上的特定文件和/或文件夾。也不可能確定AccessData是否意味着是一個沒有擴展名的文件夾或文件。

我可以使用一些常識,並聲明所有擴展名爲文件(這裏可以使用Path.GetFileExtension)以及其他所有文件夾。
或者我可以檢查它是否是我的機器上使用(分別爲File.ExistsDirectory.Exists)的文件或文件夾。

if (File.Exists(str2)) 
    Console.WriteLine("It's a file"); 
else if (Directory.Exists(str2)) 
    Console.WriteLine("It's a folder"); 
else 
    Console.WriteLine("It's not a real file or folder"); 
+0

請再看看這個問題....沒有必要獲取路徑名稱,因爲它已經提供給程序... – JavaNoob 2010-12-17 14:22:23

+0

@JavaNoob - Path類對字符串起作用。 – ChrisF 2010-12-17 14:23:40

+0

是的,但如果路徑是文件或文件夾,我們該如何區分呢? – JavaNoob 2010-12-17 14:24:55

1

使用Path.GetFileName

路徑中最後一個目錄字符後面的字符。如果路徑的最後一個字符是目錄或卷分隔符,則此方法返回String.Empty。

+0

沒有......的路徑是在日誌文本文件所以有沒有必要得到路徑.... – JavaNoob 2010-12-17 14:21:23

+0

@JavaNoob - Path類是文件路徑的抽象。它允許您加載任何路徑字符串以從中提取信息。 – Oded 2010-12-17 14:23:28

+0

是的,但如果路徑是文件或文件夾,我們該如何區分呢? – JavaNoob 2010-12-17 14:25:00

1

這是幫助程序文件和文件夾

之間,以確定有沒有辦法確定是一個路徑代表一個文件或文件夾,除非你訪問實際的文件系統。像'Foo.exe'這樣的目錄名是完全有效的,沒有擴展名的文件('Foobar')也是有效的。

1

如何用「/」將它標記爲像你正在做的那樣......然後你就會知道最後一個標記就是該文件,而不管它是否是路徑。

+0

代表另一個答案! – JavaNoob 2010-12-17 14:35:54

0

您只需/

例如爲:

字符串= 「C:/ Documents和設置/所有用戶/桌面/的AccessData FTK Imager.lnk」 整個字符串分割; string [] words = a.split('/'); int len = words.length; 所以現在的單詞[len]返回最後一個斜槓後的數據(/).. 我希望你明白...

+0

這就是aggi提到的標記。 – JavaNoob 2010-12-17 14:28:51

0

我想你只有一個字符串代表文件的名稱,如果是這樣的話你不能確定。有一個類似Folder.doc的文件夾是完全沒問題的。因此,如果您無法訪問實際的文件系統,則很難檢查。你可以親近儘管使用類似的正則表達式:

(.*\\)(.+)(\..*) 

試試它:http://www.regexplanet.com/simple/index.html 如果你在組3號很可能是它是一個文件,而不是一個文件夾的任何輸出。如果你沒有得到一些輸出試試這個直接後:

(.*\\)(.+)(\..*)? 

這會給你組的文件夾2.

+0

關於如何創建正則表達式的任何線索? – JavaNoob 2010-12-17 14:28:26

相關問題