如何重现DirectoryNotFoundException?

时间:2010-01-15 19:18:23

标签: c#

我在使用Phantom时遇到问题,请手动删除和复制。我已经解决了实际的问题,很容易检查下面的例外,任何人都可以轻松地这样做但你能告诉我如何从visual studio重现问题吗?

  

System.IO.DirectoryNotFoundException:   找不到路径的一部分   '构建/ WebUI中的\ Views / Web.config中'。在   System.IO .__ Error.WinIOError(的Int32   errorCode,String maybeFullPath)at   System.IO.File.InternalCopy(字符串   sourceFileName,String destFileName,   布尔覆盖)   Phantom.Core.WrappedFileInfo.CopyToDirectory(字符串   路径)   d:\开源\建立\ Phantom2 \幻影的\ src \ Phantom.Core \ WrappedFileInfo.cs:行   75点   建立。$$执行$关闭$ $ 23 $封25.Invoke(WrappedFileSystemInfo   文件)at   Phantom.Core.Builtins.UtilityFunctions.ForEach [T](IEnumerable 1 source, Action 1动作)in   d:\开源\建立\ Phantom2 \幻影的\ src \ Phantom.Core \内建命令\ UtilityFunctions.cs:行   34点   建立。$ $执行关闭$ 23.Invoke()
  在Phantom.Core.Target.Execute()中   d:\开源\建立\ Phantom2 \幻影的\ src \ Phantom.Core \ Target.cs:行   81点   Phantom.Core.ScriptModel.ExecuteTargets(字符串[]   targetNames)   d:\开源\建立\ Phantom2 \幻影的\ src \ Phantom.Core \ ScriptModel.cs:行   73点   Phantom.Program.Execute(String [] args)   在   d:\开源\建立\ Phantom2 \幻影的\ src \幻影\的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);
    }
}

让这个具体的问题消失了,这很好我的意思是只计算几分钟,但试图重现问题或创建一个失败的测试现在花了几个小时,我想知道它为什么无法完成或学习如何:)

编辑:这样做的原因非常愚蠢但是这里有。在这种情况下,基本目录将是“视图”,PathWithourBaseDirectory将等于“Home / About.aspx”这样的东西在cmd中不起作用,但它确实在Visual Studio中工作。接下来我知道我不能让它在Visual Studio中运行,所以我应用了我的修复程序,所有测试都变为绿色。我还是不知道为什么......

1 个答案:

答案 0 :(得分:0)

  

我想知道为什么

嗯 - 有几个问题:

让我们说路径是“C:\ Foo \ Bar.txt”(其中Bar.txt是文本文件)。
现在您正在调用Directory.CreateDirectory(路径)。

您尝试创建目录“C:\ Foo \ Bar.txt”。但是,“是”已经是一个档案。

然后,在创建文件时,将此路径与文件名组合在一起 - 结果可能是“C:\ Foo \ Bar.txt \ Bar.txt”。但是,这不能成功。