我正在将文件从源文件夹移动到目标文件夹.在移动文件之前,我正在检查该目录是否存在哪个工作正常.问题是我的第二次检查,我想确保文件夹在移动文件之前不是空的,但它没有给我正确的结果.
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.
}
}
Run Code Online (Sandbox Code Playgroud)
我知道我犯了一些小错误但不确定它是什么.以下是我在即时窗口中获得的结果的屏幕截图.
您当前的代码中有一些冗余.从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.
}
Run Code Online (Sandbox Code Playgroud)
作为一个小的性能提升,你可以替换sourceDirectory.GetFiles()
使用sourceDirectory.EnumerateFiles()
的for循环.这将允许您在方法找到它们时开始移动它们,而不是在它们全部被找到之后.