右文件夹中的文件夹,C#
当我的程序运行时,我希望它在正确的国家/地区文件夹中创建一个文件夹。如果错误来自国家1,则应将其放入该文件夹中。现在,它只在同一路径中创建新文件夹,而不在“Country1”路径中创建右文件夹中的文件夹,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;
- 例如:
- 现状: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
的子文件夹
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
}