我正在将文件从源文件夹移动到目标文件夹。在移动文件之前,我正在检查该目录是否存在哪个工作正常。问题在于我的第二次检查,我想确保文件夹在移动文件之前不是空的,但它没有给我正确的结果。
public void MoveFilesFromTempToSourceTbl()
{
//Moving all files from temp folder to orig folder.
string sourceFolder = (twitterDO.Path + "\\" + msgDate.Year.ToString() + "\\" + msgDate.Month.ToString() + "\\" + msgDate.Day.ToString() + "_Temp").Replace("\\", @"\");
string destinationFolder = (twitterDO.Path + "\\" + msgDate.Year.ToString() + "\\" + msgDate.Month.ToString() + "\\" + msgDate.Day.ToString()).Replace("\\", @"\");
string pattern = "*.txt";
if (Directory.Exists(sourceFolder))
{
if (File.Exists(pattern))
{
foreach (var file in new DirectoryInfo(sourceFolder).GetFiles(pattern))
{
file.MoveTo(Path.Combine(destinationFolder, file.Name));
}
}
if (Directory.GetFiles(sourceFolder).Length == 0) //Before deleting make sure that Temp folder is empty.
Directory.Delete(sourceFolder, true); // Delete Temp folder after moving all the contents.
}
}
我知道我犯了一些小错误,但不确定它是什么。以下是我在即时窗口中获得的结果的屏幕截图。
答案 0 :(得分:5)
您当前的代码中存在一些冗余。从if-checks开始,以下是我将如何处理这个问题:
var sourceDirectory = new DirectoryInfo(sourceFolder); // remember this, it is reused
if (sourceDirectory.Exists)
{
// Look for the files in the directory, if none found, will be empty array
foreach (var file in sourceDirectory.GetFiles(pattern))
{
file.MoveTo(Path.Combine(destinationFolder, file.Name));
}
// Re-check the directory for any remaining files
if (sourceDirectory.GetFiles(pattern).Length == 0) //Before deleting make sure that Temp folder is empty.
sourceDirectory.Delete(); // Delete Temp folder after moving all the contents.
}
作为一项小的性能改进,您可以在for-loop中将sourceDirectory.GetFiles()
替换为sourceDirectory.EnumerateFiles()
。这将允许您在方法找到它们时开始移动它们,而不是在它们全部被找到后开始移动它们。
答案 1 :(得分:0)
当您需要传递路径时,您正在将"*.txt"
传递到File.Exists()
来电。
You can read the Documentation here
或者你可以使用这样的东西:
Directory.GetFiles(destinationFolder).Contains(filename)
答案 2 :(得分:0)
我同意David的观点,但我认为你的逻辑流程应该稍微调整一下。 File.Exixts(文件名);应该发生在foreach内部。
这将允许您迭代每个文件,如果存在则执行某些操作。
答案 3 :(得分:0)
尝试添加以下内容以检查该位置是否存在任何文件:
bool exist = Directory.EnumerateFiles(sourceFolder, "*.txt").Any();