将文件移动到文件夹但忽略某些文件夹

时间:2013-12-20 18:34:59

标签: c#

我正在尝试将文本文件移动到文件夹中,但忽略test.txt,所有其他文件将移动到FileHolder文件夹。当我运行它时,它仍然将所有txt文件移动到文件夹。

private void testmodule()
{
    string filepath = Environment.GetFolderPath(Environment.SpecialFolder.Desktop);
    DirectoryInfo d = new DirectoryInfo(filepath);

    List<String> AllDeskTopFiles = Directory.GetFiles(filepath, "*.txt*").ToList();

    foreach (string file in AllDeskTopFiles)
    {
        if (file != "test.txt")
        {
            FileInfo mFile = new FileInfo(file);
            if (new FileInfo(d + "\\FileHolder\\" + mFile.Name).Exists == false)
                mFile.MoveTo(d + "\\FileHolder\\" + mFile.Name);
        }
    }
}

5 个答案:

答案 0 :(得分:2)

您的file变量包含完整路径。

答案 1 :(得分:1)

您需要根据文件名进行过滤,而不是完整路径。

您可以在LINQ语句中执行过滤:

var allDeskTopFiles = Directory
           .GetFiles(filepath, "*.txt*")
           .Where(f => !f.EndsWith("test.txt", StringComparison.InvariantCultureIgnoreCase);


foreach (string file in allDeskTopFiles)
{
    // Move all files now

答案 2 :(得分:1)

Directory.GetFiles返回指定目录中的文件名(包括其路径)。

因此,您需要应用一种方法来仅提取文件名

  foreach (string file in AllDeskTopFiles)
    {
        if (Path.GetFileName(file).ToLower() != "test.txt")
        {
            FileInfo mFile = new FileInfo(file);
            if (new FileInfo(d + "\\FileHolder\\" + mFile.Name).Exists == false)
                mFile.MoveTo(d + "\\FileHolder\\" + mFile.Name);
        }
    }

为每个循环创建一个FileInfo只是为了测试文件是否存在似乎有点贵

  string destPath = Path.Combine(filepath, "FileHolder");
  foreach (string file in AllDeskTopFiles)
  {
        string fileToMove = Path.GetFileName(file).ToLower();
        if (fileToMove != "test.txt")
        {
            string destFile = Path.Combine(destPath, fileToMove);
            if (!File.Exists(destFile))
                File.Move(file, destFile);
        }
   }

答案 3 :(得分:0)

以下应该修复它,现在更清洁:

private void testmodule()
{
    string filepath = Environment.GetFolderPath(Environment.SpecialFolder.Desktop);
    DirectoryInfo d = new DirectoryInfo(filepath);

    List<String> AllDeskTopFiles = Directory.GetFiles(filepath, "*.txt*").ToList();

    foreach (string file in AllDeskTopFiles)
    {
        //if (file.ToLower().EndsWith("test.txt"))
        //{
        //    FileInfo mFile = new FileInfo(file);
        //    if (new FileInfo(d + "\\FileHolder\\" + mFile.Name).Exists == false)
        //        mFile.MoveTo(d + "\\FileHolder\\" + mFile.Name);
        //}
        FileInfo mFile = new FileInfo(file);
        if(mFile.Name.ToLower() != "test.txt")
        {
            if (new FileInfo(d + "\\FileHolder\\" + mFile.Name).Exists == false)
                mFile.MoveTo(d + "\\FileHolder\\" + mFile.Name);
        }
    }
}

答案 4 :(得分:0)

您可以检查文件名,如下所示:

            DirectoryInfo dirInfo = new DirectoryInfo("old");

        foreach (FileInfo fi in dirInfo.GetFiles("*.txt"))
        {
            if (fi.Name != "test.txt")
                File.Copy(fi.FullName, "new/" + fi.Name);
        }

或者更改代码以检查if !file.Contains("text.txt")而不是if file != "test.txt