[英]C# .NET - Is a deleted path a directory or file
如何使用C#.Net識別已刪除的路徑是文件還是目錄?
謝謝
假設文件/目錄實際存在,您可以使用兩個靜態方法:
兩者都接受單個字符串參數,並在文件/目錄存在時返回布爾值。
另一種情況是,當您有一個不引用文件系統中現有文件/目錄的路徑時 - 可能它指向數據庫中的某種“虛擬文件/目錄”,或者路徑指向文件/目錄,以前存在,但現在(可能)刪除了。 在這種情況下,您必須自己定義“類似路徑的文件”和“類似路徑的目錄”的區別。 我可以想到兩種方法:
讓我們在幾個示例輸入字符串上測試兩種方法:
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.Exists
和File.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.Exists
和File.Exists
也同樣出色。
有關詳細信息,請參見此處
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.