簡體   English   中英

如何重現DirectoryNotFoundException?

[英]How do I reproduce a DirectoryNotFoundException?

我在使用Phantom進行遞歸刪除和復制時遇到問題。 我已經解決了實際問題,很容易檢查以下異常,任何人都可以輕松做到,但是您能告訴我如何從Visual Studio重現該問題嗎?

System.IO.DirectoryNotFoundException:找不到路徑“ build / webui \\ Views / Web.config”的一部分。 d:\\ OpenSource中Phantom.Core.WrappedFileInfo.CopyToDirectory(String path)處System.IO.File.InternalCopy(String sourceFileName,String destFileName,Boolean overwrite)處System.IO .__ Error.WinIOError(Int32 errorCode,String mayFullPath) \\ Build \\ Phantom2 \\ Phantom \\ src \\ Phantom.Core \\ WrappedFileInfo.cs:第75行在構建。$$ Execute $ closure $ 23 $ closure $ 25.Invoke(WrappedFileSystemInfo文件)在Phantom.Core.Builtins.UtilityFunctions.ForEach [T] (IEnumerable 1 source, Action 1 action)in d:\\ OpenSource \\ Build \\ Phantom2 \\ Phantom \\ src \\ Phantom.Core \\ Builtins \\ UtilityFunctions.cs:build的第34行。$ Execute $ closure $ 23.Invoke()
在d中的Phantom.Core.Target.Execute()中:d中的Phantom.Core.ScriptModel.ExecuteTargets(String [] targetNames)在d:\\ OpenSource \\ Build \\ Phantom2 \\ Phantom \\ src \\ Phantom.Core \\ Target.cs:行81 :\\ OpenSource \\ Build \\ Phantom2 \\ Phantom \\ src \\ Phantom.Core \\ ScriptModel.cs:d:\\ OpenSource \\ Build \\ Phantom2 \\ Phantom \\ src \\ Phantom \\中Phantom.Program.Execute(String [] args)處的第73行Program.cs:第57行

問題是,幻影是從.bat / .cmd文件啟動的,並且生成文件是作為參數發送的,這在我的Windows 7 x64計算機上以某種方式失敗了,但是在Visual Studio 2008中執行完全相同的操作是完美的,即使我可以遞歸地復制Views文件夾。 原始代碼(從命令行失敗):

public override void CopyToDirectory(string path) {
    if (!Directory.Exists(path)) {
        Directory.CreateDirectory(path);
    }

    if (Flatten) {
        var combinedPath = Path.Combine(path, Name);
        File.Copy(FullName, combinedPath, true);
    }
    else {
        var combinedPath = Path.Combine(path, PathWithoutBaseDirectory);
        File.Copy(FullName, combinedPath, true);
    }
}

將以上內容更改為:

public override void CopyToDirectory(string path) {
    if (!Directory.Exists(path)) {
        Directory.CreateDirectory(path);
    }

    if (Flatten) {
        var combinedPath = Path.Combine(path, Name);
        File.Copy(FullName, combinedPath, true);
    }
    else {
        var combinedPath = Path.Combine(path, PathWithoutBaseDirectory);
        var newPath = Path.GetDirectoryName(combinedPath);
        if (!Directory.Exists(newPath)) {
            Directory.CreateDirectory(newPath);
        }
        File.Copy(FullName, combinedPath, true);
    }
}

可以使該特定問題消失,這很好,我的意思是弄清楚它只用了幾分鍾,但是嘗試重現問題或創建失敗的測試已經花費了幾個小時,我想知道為什么它不能完成或學習如何:)

編輯:這樣做的原因是非常愚蠢的,但這里。 在這種情況下,基本目錄將是“ Views”,PathWithourBaseDirectory將等於“ Home / About.aspx”之類的東西,該死的東西在cmd中不起作用,但在Visual Studio中確實起作用。 接下來,我知道我也無法使其在Visual Studio中運行,因此我應用了此修復程序,所有測試均變為綠色。 我還是不知道為什么

我想知道為什么

好吧-有幾個問題:

假設路徑為“ C:\\ Foo \\ Bar.txt”(其中Bar.txt是文本文件)。
現在,您正在調用Directory.CreateDirectory(path)。

您嘗試創建目錄“ C:\\ Foo \\ Bar.txt”。 但是,“已經”已經是一個文件。

然后,在創建文件時,將此路徑與文件名結合在一起-結果可能是“ C:\\ Foo \\ Bar.txt \\ Bar.txt”。 但是,這不能成功。

暫無
暫無

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

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