检查c#中文件夹中是否存在文件

use*_*772 -2 c# silverlight

我正在将文件从源文件夹移动到目标文件夹.在移动文件之前,我正在检查该目录是否存在哪个工作正常.问题是我的第二次检查,我想确保文件夹在移动文件之前不是空的,但它没有给我正确的结果.

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)

我知道我犯了一些小错误但不确定它是什么.以下是我在即时窗口中获得的结果的屏幕截图.

http://imgur.com/FZvo9cj

Cᴏʀ*_*ᴏʀʏ 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. 
 }
Run Code Online (Sandbox Code Playgroud)

作为一个小的性能提升,你可以替换sourceDirectory.GetFiles()使用sourceDirectory.EnumerateFiles()的for循环.这将允许您在方法找到它们时开始移动它们,而不是在它们全部被找到之后.