我做了一個應用程序,用於在某些目錄中搜索某些文件。當一個目錄不存在時,它會拋出DirectoryNotFoundException
。我發現了這個異常,但它沒有DirectoryName
屬性,或者像FileNotFoundException
(FileName)那樣的屬性。我如何從異常屬性中找到目錄名稱?C#從DirectoryNotFoundException獲取目錄名稱
回答
沒有辦法在本機上做到這一點。
地方添加這個類到您的項目:
public static class DirectoryNotFoundExceptionExtentions
{
public static string GetPath(this DirectoryNotFoundException dnfe)
{
System.Text.RegularExpressions.Regex pathMatcher = new System.Text.RegularExpressions.Regex(@"[^']+");
return pathMatcher.Matches(dnfe.Message)[1].Value;
}
}
捕獲異常,並使用類型擴展名是這樣的:
catch (DirectoryNotFoundException dnfe)
{
Console.WriteLine(dnfe.GetPath());
}
謝謝它的作品! – Sp3ct3R
在我的情況下,我不得不尋找雙引號:ex.Message.Split(new [] {''','\''})[1] – user1027167
FileNotFoundException
具有文件名,但DirectoryNotFoundException
沒有目錄名稱,是不是有點不一致?
這是一個解決方法:在引發異常之前,使用異常的Data
屬性關聯錯誤的目錄名稱。
檢查它Directory.Exists
如果它不在他的代碼中,該怎麼辦?如果他是試圖使用該目錄的人,他可能已經擁有目錄名稱,所以它首先是一個有爭議的問題。 –
第一存在立即試圖找到文件的目錄,該目錄保存的名字在一個變量之前。然後爲該目錄中查找的代碼開始一個try塊。如果該代碼塊丟失,您現在擁有可用的目錄名稱。
例如:
// ... somewhere in some method that's about to search a directory.
var dirName = directories[i]; // or something -- how do you get it before you pass it to DirectoryInfo?
try
{
SearchDirectory(dirName); // or a block of code that does the work
}
catch(Exception e)
{
// at this point, you know dirName. You can log it, add it to a list of erroring
// directories, or whatever. You could throw here, or swallow the error after logging it, etc.
}
如果你只希望踩這個錯誤在你的IDE,那麼你可以嘗試這樣做:
在Visual Studio中,去Debug -> Exceptions
,然後檢查Thrown
框爲Common Language Runtime Exceptions
。這會讓你在發生異常時立即獲得異常,而不是等待被捕。
它看起來像一個黑客,但你可以從Message
財產提取路徑。至於我,我寧願首先檢查目錄存在使用Directory.Exists
方法。
catch (DirectoryNotFoundException e) {
//Result will be: Could not find a part of the path "C:\incorrect\path".
Console.WriteLine(e.Message);
//Result will be: C:\incorrect\path
Console.WriteLine(e.Message.Replace("Could not find a part of the path \"","").Replace("\".",""));
}
根據http://msdn.microsoft.com/en-us/library/system.io.directorynotfoundexception.aspx,看起來路徑的確出現在「Message」屬性中。 – BinaryTox1n
+1 - 我會稱之爲黑客攻擊,因爲如果應用程序在不同的文化中運行,它將會失敗。儘管如此,這對於事先知曉文化的任何場合都是一個很好的解決方案。 (檢查Directory.Exists更糟,因爲在任何情況下都可能失敗,這意味着對於同一個問題,有兩種不同的錯誤條件!) –
請記住,通常,記錄異常的正確方法不是通過使用它的消息,但通過調用'Exception.ToString()'它包含消息和其他有用的信息。 –
的DirectoryNotFoundException的消息成員的大多數目錄拋出的格式類方法是「Directory」輸入「未找到」。從這個字符串中提取輸入應該不難。
問題是,爲什麼需要從異常中獲取輸入參數?如果您是使用該確切參數調用方法的輸入參數?
對不起,挖掘了一篇舊文章,但正如其他人所說,當FileNotFoundException異常時,DirectoryNotFoundException沒有將該目錄作爲屬性是非常愚蠢的。
我已經把它作爲功能請求.NET:
- 1. C#獲取目錄名稱
- 2. 從文件名獲取目錄名稱
- 3. 如何從SaveFileDialog.FileName獲取目錄名稱
- 4. 從FileInfo對象獲取目錄名稱
- 5. 從目錄名稱獲取版本
- 6. 如何從目錄名稱中提取父目錄的名稱?
- 7. Laravel 4.2從目錄中獲取目錄名稱
- 8. C# - 問題,同時列出目錄 - DirectoryNotFoundException
- 9. C#訪問winevt目錄拋出DirectoryNotFoundException
- 10. 獲取目錄包含目錄的目錄名稱
- 11. 獲取虛擬目錄的名稱?
- 12. 獲取父目錄的名稱
- 13. 我想獲取所有目錄名稱
- 14. 獲取根目錄名稱 - PHP
- 15. 如何從Ant中的目錄名稱獲取文件名?
- 16. C#從項目B獲取項目A的表單名稱
- 17. 獲取目錄名稱不完整路徑(C UNIX)
- 18. C#如何獲取目錄的名稱而不是路徑?
- 19. C#:獲取相對路徑的第一個目錄名稱
- 20. 如何獲取erlang中給定目錄的父目錄名稱?
- 21. CMake:如何獲取目錄中所有子目錄的名稱?
- 22. Django目錄上傳獲取子目錄名稱
- 23. 從ASP.NET C#中的URL中提取子目錄名稱#
- 24. 從活動目錄獲取計算機名稱和OU的
- 25. 從目錄獲取文件的最大日期時間名稱
- 26. .net,內置方式從路徑獲取目錄名稱?
- 27. 嘗試從用戶選擇數組中獲取目錄名稱
- 28. Python - 正則表達式從HDFS獲取目錄名稱
- 29. 從資產目錄中獲取文件夾名稱
- 30. 從目錄獲取按名稱排序的文件列表
,如果你得到了DirectoryNotFoundException目錄不存在,你肯定不會,如果找到的目錄名稱目錄不存在。我是否誤解了這個問題? – Caimen
@ Caimen:哪個目錄不存在? – SLaks
你想要找到它的名字嗎? –