在C#中移动文件

时间:2012-11-29 08:53:58

标签: c# file move

我正在将一些图像(文件名为(1).PNG,(2).PNG等)从一个目录移动到另一个目录。我使用以下代码:

for (int i = 1; i < n; i++)
{
    try
    {
        from = "E:\\vid\\(" + i + ").PNG";
        to = "E:\\ConvertedFiles\\" + i + ".png";

        File.Move(from, to); // Try to move
        Console.WriteLine("Moved"); // Success
    }
    catch (IOException ex)
    {
        Console.WriteLine(ex); // Write error
    }
}

但是,我收到以下错误:

mscorlib.dll

中发生System.IO.FileNotFoundException类型的第一次机会异常
System.IO.FileNotFoundException: Could not find file 'E:\vid\(1).PNG'.

另外,我打算重命名文件,以便转换后的文件名为00001.png,00002.png ... 00101,依此类推。

6 个答案:

答案 0 :(得分:21)

我建议您使用'@'以更易读的方式逃避斜杠。还可以使用Path.Combine(...)来连接路径和PadLeft,以便将您的文件名作为您的详细信息。

for (int i = 1; i < n; i++)
{
    try
    {
        from = System.IO.Path.Combine(@"E:\vid\","(" + i.ToString() + ").PNG");
        to = System.IO.Path.Combine(@"E:\ConvertedFiles\",i.ToString().PadLeft(6,'0') + ".png");

        File.Move(from, to); // Try to move
        Console.WriteLine("Moved"); // Success
    }
    catch (IOException ex)
    {
        Console.WriteLine(ex); // Write error
    }
}

答案 1 :(得分:2)

你为什么不使用这样的东西?

var folder = new DirectoryInfo(@"E:\vid\"));

if (folder.Exists)
{
    var files = folder.GetFiles(".png");
    files.toList().ForEach(f=>File.Move(from,to));
}

答案 2 :(得分:1)

该异常表示文件E:\vid(1).PNG不存在。你的意思是E:\vid1.PNG

使用System.IO.Path类来构造路径,它比连接字符串更好。你不必担心逃避反斜杠。

答案 3 :(得分:1)

i.ToString()

可能对你有帮助。你正在通过

from = "E:\\vid\\(" + i + ").PNG";
to = "E:\\ConvertedFiles\\" + i + ".png";

由于那个整数和连接不起作用 而不是使用\\,请像这样添加@

from = @"E:\vid\(" + i + ").PNG";

答案 4 :(得分:1)

我刚在Visual Studio中运行它。它奏效了。

using System;
using System.IO;
using System.Collections.Generic;
using System.Linq;
using System.Text;


namespace ConsoleApplication2

{

    class Program
    {
        static void Main()
        {
            int n = 3;
            for (int i = 1; i < n; i++)
            {
                string from = "C:\\vid\\(" + i + ").PNG";
                string to = "C:\\ConvertedFiles\\" + i + ".png";
                {
                    try
                    {
                        File.Move(from, to); // Try to move
                        Console.WriteLine("Moved"); // Success
                    }
                    catch (System.IO.FileNotFoundException e)
                    {
                        Console.WriteLine(e); // Write error
                    }
                }
            }
        }
    }

}

也许当您将文件移动到vid目录中以开始测试时,窗口会从括号中删除。 (1).png变成了1.png ......我从那个现象中找到了一个找不到错误的文件...否则,你的代码是可靠的。我的版本几乎完全相同。

答案 5 :(得分:0)

var folder = new DirectoryInfo(sourcefolder);

if (folder.Exists)
{
    var files = folder.GetFiles("*.png");
    files.ToList().ForEach(f => File.Move(sourcefolder + f, newFolderName + f));
}

我相信这会有所帮助。