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

时间:2014-10-08 15:36:21

标签: 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. 
            }
        }

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

http://imgur.com/FZvo9cj

4 个答案:

答案 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();