当我的程序运行时,我希望它在正确的国家/地区文件夹中创建一个文件夹。如果错误来自国家1,则应将其放入该文件夹中。现在它只在同一路径中创建新文件夹而不是“Country1”路径。
我做错了什么?
#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);
}
答案 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;
所以failureDirToday
是C:\Source\Country1 Failure 2014-1-21
。这与你得到的结果相同,正如我在开头所说:你根本就不创建任何名为Country1
的子文件夹。
答案 1 :(得分:0)
通过调用 AppDomain.CurrentDomain.BaseDirectory ,不确定您要实现的目标。这将返回运行应用程序的文件夹,而不是C:或任何其他根文件夹。 我也不明白你为什么要附上 Source 文件夹,但也许这是你想要做的事情的一部分。
您应该使用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
}