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

时间:2014-01-21 08:22:13

标签: c# visual-studio-2010 directory

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

  • 示例:
  • 现在如何:C:\ Country1 Failure 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);
        }

2 个答案:

答案 0 :(得分:1)

我没有看到您创建Country1子文件夹。

我只是改变了

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

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

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


让我们看看你的代码,看看会发生什么:

failureDir = AppDomain.CurrentDomain.BaseDirectory + "Source\\";

failureDir现在是C:\Source

我们假设代码会进入第一个if分支:

failureDir = failureDir + "\\Country1 Failure";

failureDir现在是C:\Source\Country1 Failure

在所有if-elses之后还有一个最后声明:

failureDirToday = failureDir + " " + todayMoveDate;

所以failureDirTodayC:\Source\Country1 Failure 2014-1-21。这与你得到的结果相同,正如我在开头所说:你根本就不创建任何名为Country1的子文件夹。

答案 1 :(得分:0)

  1. 通过调用 AppDomain.CurrentDomain.BaseDirectory ,不确定您要实现的目标。这将返回运行应用程序的文件夹,而不是C:或任何其他根文件夹。 我也不明白你为什么要附上 Source 文件夹,但也许这是你想要做的事情的一部分。

  2. 您应该使用Path.Combine来连接文件夹名称并创建层次结构。 在您的示例中,您将创建2个不同的文件夹,一个用于,另一个没有日期。 你应该做什么,就像

    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
    }