簡體   English   中英

C#.NET - 刪除的路徑是目錄還是文件

[英]C# .NET - Is a deleted path a directory or file

如何使用C#.Net識別已刪除的路徑是文件還是目錄?

謝謝

假設文件/目錄實際存在,您可以使用兩個靜態方法:

兩者都接受單個字符串參數,並在文件/目錄存在時返回布爾值。

另一種情況是,當您有一個引用文件系統中現有文件/目錄的路徑時 - 可能它指向數據庫中的某種“虛擬文件/目錄”,或者路徑指向文件/目錄,以前存在,但現在(可能)刪除了。 在這種情況下,您必須自己定義“類似路徑的文件”和“類似路徑的目錄”的區別。 我可以想到兩種方法:

  • 答:目錄路徑以目錄分隔符結束(由Wael Dalloul建議)
  • B:文件路徑在其最后一個路徑令牌中有一個擴展名分隔符

讓我們在幾個示例輸入字符串上測試兩種方法:

  • c:\\windows\\是兩種情況下的目錄
  • c:\\windows僅在使用方法B時才是目錄
  • c:\\windows\\notepad.exe是兩種情況下的文件
  • c:\\windows\\system32\\drivers\\etc\\hosts僅在方法A中為文件

正如這些示例所指出的, 除非您能夠從頭開始精確控制路徑的設計, 否則兩種方法都不能保證在所有情況下都給出預期的答案。

如果在文件上使用Directory.Exists(...),它將返回false。 同樣,如果在目錄上使用File.Exists(...),它將返回false

你也可以使用: path.GetFileName

如果path的最后一個字符是目錄或卷分隔符,則此方法返回Empty,因此您可以檢查結果是否為空,因此它是一個目錄,否則它是一個文件。

if (Path.HasExtension(fileFolderPath) && !string.IsNullOrEmpty(Path.GetFileName(fileFolderPath)))
{
    //path is for file
}

當路徑不存在時, Directory.ExistsFile.Exists不是選項。

如果你有一個擴展,那么你可以猜測它是一個文件,但這是一個猜測,因為你總是可以命名你的文件夾“myfile.txt”。 提到的另一個猜測是它是否以路徑分隔符結束。

File.Exists和Directory.Exists都使用GetFileAttributesEx來查看文件的屬性,但是因為它不再存在,所以你沒有那個選項。 如果它在回收站中,您可以在那里找到它 - 這個問題有詳細信息。

您可以使用

[DllImport("kernel32.dll", CharSet = CharSet.Auto, SetError = true)]
static extern int GetFileAttributes(string lpFileName);

bool IsDirectory(string path) {
     return GetFileAttributes(path) & 16 == 16;
}

但是,其他答案中建議的Directory.ExistsFile.Exists也同樣出色。

有關詳細信息,請參見此處

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM