右文件夹中的文件夹,C#

右文件夹中的文件夹,C#,c#,visual-studio-2010,directory,C#,Visual Studio 2010,Directory,当我的程序运行时,我希望它在正确的国家/地区文件夹中创建一个文件夹。如果错误来自国家1,则应将其放入该文件夹中。现在,它只在同一路径中创建新文件夹,而不在“Country1”路径中创建 例如: 现状:C:\Country1故障2014-1-21 应如何:C:\Country1\Country1故障2014-1-21 我做错了什么 #region Failure Folder Creation string failureDir = string.Empty;

当我的程序运行时,我希望它在正确的国家/地区文件夹中创建一个文件夹。如果错误来自国家1,则应将其放入该文件夹中。现在,它只在同一路径中创建新文件夹,而不在“Country1”路径中创建

  • 例如:
  • 现状:C:\Country1故障2014-1-21
  • 应如何:C:\Country1\Country1故障2014-1-21
我做错了什么

    #region Failure Folder Creation
        string failureDir = string.Empty;
        failureDir = AppDomain.CurrentDomain.BaseDirectory + "Source\\";
        try
        {

            string failureDirToday = string.Empty;
            if (metaDataXmlPath.Contains("Country1"))
                failureDir = failureDir + "\\Country1 Failure";
            else if (metaDataXmlPath.Contains("Country2"))
                failureDir = "\\Country2 Failure";
            else if (metaDataXmlPath.Contains("Country3"))
                failureDir = "\\Country3 Failure";
            failureDirToday = failureDir + " " + todayMoveDate;

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

            if (!Directory.Exists(failureDirToday))
                Directory.CreateDirectory(failureDirToday);
        }

我看不到您创建了
Country1
子文件夹

我只想换衣服

if (metaDataXmlPath.Contains("Country1"))
    failureDir = failureDir + "\\Country1 Failure";
进入

(这只是最简单的解决方案。在处理路径时,我会坚持使用静态方法,而不是字符串连接。)


让我们浏览一下您的代码,看看会发生什么:

failureDir = AppDomain.CurrentDomain.BaseDirectory + "Source\\";
failureDir
现在是
C:\Source

我们假设代码运行到第一个if分支:

failureDir = failureDir + "\\Country1 Failure";
failureDir
现在是
C:\Source\Country1 Failure

在所有这些之后,还有一个最终声明:

failureDirToday = failureDir + " " + todayMoveDate;
因此,今天的
failuredir
C:\Source\Country1 Failure 2014-1-21
。这与您得到的结果相同,正如我在开头所说的:您只是不创建任何名为
Country1
的子文件夹

  • 不确定调用AppDomain.CurrentDomain.BaseDirectory试图实现什么。这将返回运行应用程序的文件夹,而不是C:或任何其他根文件夹。 我也不明白为什么要将源文件夹附加到它,但这可能是您想要做的事情的一部分

  • 您应该使用Path.Combine来连接文件夹名称并创建层次结构。 在您的示例中,您正在创建两个不同的文件夹,一个带日期,另一个不带日期。 你应该做的是

    if(metaDataXmlPath.Contains("Country1"))
    {
         string errorSourceName = "Country1";
         failureDir = Path.Combine(Path.Combine(failureDir, errorSourceName), String.Format("{0} {1}", errorSourceName, todayMoveDate));
    }
    
    现在,您可以仅创建failureDir,这将创建整个层次结构

    我正在添加一个代码示例,说明更改后代码应该如何处理

    string failureDir = string.Empty;
    failureDir = AppDomain.CurrentDomain.BaseDirectory + "Source\\";
    try
    {
    
        string failureDirToday = string.Empty;
        if(metaDataXmlPath.Contains("Country1"))
        {
             string errorSourceName = "Country1";
             failureDir = Path.Combine(Path.Combine(failureDir, errorSourceName), String.Format("{0} {1}", errorSourceName, todayMoveDate));
        }
        else if (metaDataXmlPath.Contains("Country2"))
        {
             string errorSourceName = "Country2";
             failureDir = Path.Combine(Path.Combine(failureDir, errorSourceName), String.Format("{0} {1}", errorSourceName, todayMoveDate));
        }
        else if (metaDataXmlPath.Contains("Country3"))
        {
             string errorSourceName = "Country3";
             failureDir = Path.Combine(Path.Combine(failureDir, errorSourceName), String.Format("{0} {1}", errorSourceName, todayMoveDate));
        }
        // Notice the eliminated line here
    
        // This is where we actually create the folder
        if (!Directory.Exists(failureDir))
            Directory.CreateDirectory(failureDir);
    
        // Notice the eliminated line here
    }
    

  • 在对文件进行任何操作之前,您能否只记录/调试
    failureDir
    varible?如果不是您所期望的,找出错误的地方最佳做法是使用
    System.IO.Path.Combine(failureDir,“Country1 Failure”)
    而不是
    failureDir+“\\Country1 Failure”这刚刚在主结构中添加了一个2014-1-21文件夹,为我在编码方面的头晕目眩提供了极大的帮助和解释。它正在接近,但现在它正在将两个文件夹:Country1 Failure和Country1 Failure 2014-1-21添加到主要的Country1 Failure文件夹中。。哈哈。我只需要最后一个,然后一切都好:)@Lebowski然后你必须删除
    Directory.CreateDirectory(failureDir)因为这是创建不带日期的to文件夹的代码。此代码在Country1中创建了两个子文件夹。丹麦失败2014-1-21和丹麦失败2014-1-21 2014-1-21请参见我的编辑。并在运行代码之前从源目录中删除文件夹。这一点现在已经很好地解决了,只剩下一个问题:如果我明天运行,它会将Cuntry1 Failure 2014-1-22添加到Country1文件夹中吗?在您的示例中,您没有说明如何将日期值提取到todayMoveDate变量中。正确的方法是调用DateTime.Today并将其格式化为您想要的日期格式。如果您有正确的日期,则“是”,它会将其添加到正确的文件夹下。如果你觉得我的答案有帮助,请投票吧,我的朋友,我希望我能投票给你,但我还需要5分。但是我会尽快做的。。感谢您的大力帮助:)
    
    string failureDir = string.Empty;
    failureDir = AppDomain.CurrentDomain.BaseDirectory + "Source\\";
    try
    {
    
        string failureDirToday = string.Empty;
        if(metaDataXmlPath.Contains("Country1"))
        {
             string errorSourceName = "Country1";
             failureDir = Path.Combine(Path.Combine(failureDir, errorSourceName), String.Format("{0} {1}", errorSourceName, todayMoveDate));
        }
        else if (metaDataXmlPath.Contains("Country2"))
        {
             string errorSourceName = "Country2";
             failureDir = Path.Combine(Path.Combine(failureDir, errorSourceName), String.Format("{0} {1}", errorSourceName, todayMoveDate));
        }
        else if (metaDataXmlPath.Contains("Country3"))
        {
             string errorSourceName = "Country3";
             failureDir = Path.Combine(Path.Combine(failureDir, errorSourceName), String.Format("{0} {1}", errorSourceName, todayMoveDate));
        }
        // Notice the eliminated line here
    
        // This is where we actually create the folder
        if (!Directory.Exists(failureDir))
            Directory.CreateDirectory(failureDir);
    
        // Notice the eliminated line here
    }