2015-07-21 92 views
-2

我試圖檢查路徑刪除目錄或文件路徑的目錄或文件。我發現此代碼:檢查路徑是目錄或文件的C#

FileAttributes attr = File.GetAttributes(@"C:\Example"); 
if (attr.HasFlag(FileAttributes.Directory)) 
    MessageBox.Show("It's a directory"); 
else 
    MessageBox.Show("It's a file"); 

但是,此代碼不適用於已刪除的目錄或文件。

我有兩個文件夾

C:\Dir1 
C:\Dir2 

Dir1中有正常的文件,如「的test.txt」,在Dir2中也有像「test.rar」或「test.zip」的壓縮文件,我需要刪除Dir1中的文件時刪除Dir2中的文件。

東西我試過了,但沒有任何工程。

有沒有可能做到這一點?

謝謝!

+7

如果它已被刪除,不再存在,它的問題是什麼時,它的存在? –

+0

不過,我需要從另一個文件夾中刪除這一點,所以我需要知道,如果它的文件或 –

+0

(因爲擴展的)目錄中你需要將其刪除(這將在未來發生),或者你想檢查刪除了哪些內容文件或目錄是否存在(發生在過去)? –

回答

1

如果路徑所代表的對象不存在或已被從文件系統中刪除,你要做的是代表一個文件系統路徑的字符串:它不是什麼。

用於指示路徑旨在是一個目錄(而不是一個文件)的正常慣例是與目錄分隔符來終止它,所以

c:\foo\bar\baz\bat 

被取爲表示一個文件,而

c:\foo\bar\baz\bat\ 

被用來表明目錄。

如果你想要的是刪除文件系統條目(可以是文件或目錄,遞歸刪除其內容和子目錄),像應該足夠了:

public void DeleteFileOrDirectory(string path) 
{ 

    try 
    { 
    File.Delete(path) ; 
    } 
    catch (UnauthorizedAccessException) 
    { 
    // If we get here, 
    // - the caller lacks the required permissions, or 
    // - the file has its read-only attribute set, or 
    // - the file is a directory. 
    // 
    // Either way: intentionally swallow the exception and continue. 
    } 

    try 
    { 
    Directory.Delete(path , true) ; 
    } 
    catch (DirectoryNotFoundException) 
    { 
    // If we get here, 
    // - path does not exist or could not be found 
    // - path refers to a file instead of a directory 
    // - the path is invalid (e.g., on an unmapped drive or the like) 
    // 
    // Either way: intentationally swallow the exception and continue 
    } 

    return ; 
} 

應該注意的是有在此過程中可能拋出的任何數量的異常。

相關問題