簡體   English   中英

目錄。存在時間明智嗎?

[英]Directory.Exists sensible to time?

我的應用程序中包含以下代碼:

if (!Directory.Exists(myPath))
    Directory.CreateDirectory(myPath);

如果我在常規單元測試中運行它,則有時會通過,有時則不會。 該目錄始終存在(我已經確定了它的位置,因此從技術上講,它永遠不會通過代碼“創建”)。 但是每隔一段時間Directory.Exists(myPath)返回false ,這會使代碼嘗試創建該文件夾,然后我得到一個UnauthorizedAccessException

有趣的是,如果我在CreateDirectory上放置一個斷點,然后向上移動黃色箭頭進行測試,則測試返回true

這是怎么回事?

myPath\\\\nameOfLocalMachine\\sharedFolder 共享是可靠的並且經常使用。.NET4.0

我只是讓提琴手模擬了3000個順序請求。 175個失敗...所有消息相同:

拒絕訪問路徑'\\ nameOfLocalMachine \\ sharedFolder \\ randomFileName.json'

在Windows上,這很正常。 程序在這樣的目錄上打開一個句柄,並指定刪除共享 即使程序正在使用該目錄,任何人都可以刪除該目錄。 在關閉該句柄之前,該目錄實際上不會從文件系統中消失。 隨之而來的是,嘗試重新創建該目錄無法正常工作,它仍然存在。 Windows生成“訪問被拒絕”錯誤,該錯誤在您的C#程序中報告為UnauthorizedAccessException。

雖然這聽起來有些晦澀難懂,但Windows中的每個程序都可以做到這一點。 每個進程都有一個默認的工作目錄,即Environment.CurrentDirectory的值。 在這樣的目錄上創建一個句柄可以確保它在程序使用時不會消失。 在其他情況下,FileSystemWatcher將是另一個示例。 或程序正在忙於遍歷目錄。 反惡意軟件和搜索索引器因難以診斷此類錯誤的來源而臭名昭著。

否則,將成為多任務操作系統的標准危害。 您不是唯一使用文件系統的人。 不要重復刪除和創建同一目錄在您的列表中應該很高。 如果絕對必要,則在刪除目錄之前先重命名目錄。 您仍然無法刪除重命名的目錄,但是您將不會重新創建它。 您可以稍后將其刪除,下次需要這樣做時。 麻煩的幾率要低得多。 因為更多的時間過去了。

暫無
暫無

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

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