![](/img/trans.png)
[英]Getting Absolute File Path C# (Server Directories, Junctions, Symbolic Links)
[英]How to list files/directories where there are symbolic links
我有一個帶有符號鏈接的文件夾(該目錄上的 cmd dir
,如果有任何區別,則將它們列為SYMLINKD
)。 每當我嘗試調用Directory.GetFiles
、 Directory.GetDirectories()
或DirectoryInfo
中的任何其他變體時,都會出現以下異常:
System.IO.DirectoryNotFoundException:找不到路徑“SYMBOLIC_LINK_PATH”的一部分。
我還嘗試使用前綴為\\?\
的目錄(此處提到的“長路徑前綴”: https://docs.microsoft.com/en-us/windows/win32/fileio/naming-a-file #最大路徑長度限制)
如何遍歷目錄並刪除這些符號鏈接? 我有什么替代方法可以遍歷目錄?
(正如評論中所建議的那樣,我也嘗試過Directory.GetFiles("DirectorytoSearch", "*", SearchOption.AllDirectories)
具有相同的結果: DirectoryNotFoundException
即使MSDN 文章指出此選項應該“包括重新解析點,例如。 ...符號鏈接")
你提到的那篇文章:
https://docs.microsoft.com/en-us/windows/win32/fileio/maximum-file-path-limitation
發布於 2020 年 9 月 15 日,這是最近的事。
您肯定已經更新了您正在使用的 .NET 運行時,對吧?
此外,至少需要 Windows 10 版本 1607,請仔細檢查您是否已更新。
何時以及如果您要更新運行時,請檢查它的最新更新是否至少在 2020 年 9 月 15 日之后發布。
如果您使用的是 .NET 框架運行時,請嘗試在 .NET 核心運行時中執行此操作,因為它更新更頻繁。
如果一切都失敗了,試試這個解決方案: https://stackoverflow.com/a/53439677/2536887 ,
否則提交錯誤報告。
每個人的意見幫助我縮小范圍並找出問題所在。 我相信問題是我刪除了符號鏈接的目標,但我的遞歸刪除 function 仍然發現它是一個目錄。 因此,當我嘗試枚舉該符號鏈接的文件/目錄時,它拋出了 DirectoryNotFound 異常(在那里遇到肯定會令人困惑,因為該目錄似乎仍然存在 - 即使在文件資源管理器中,直到您單擊它)。
解決方案是在嘗試收集目錄的子目錄時,捕獲DirectoryNotFound
異常並嘗試刪除目錄。 這對我有用
FileInfo[] files = null;
try
{
files = currentDirectory.GetFiles("*", SearchOption.AllDirectories);
}
catch (DirectoryNotFoundException)
{
currentDirectory.Delete(true);
}
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.