21

我正在将一些图像(文件名是(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
    }
}

但是,我收到以下错误:

System.IO.FileNotFoundExceptionmscorlib.dll 中发生了第一次机会类型的异常

System.IO.FileNotFoundException: Could not find file 'E:\vid\(1).PNG'.

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

4

6 回答 6

24

我建议您使用'@'以便以更易读的方式转义斜杠。也可以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
    }
}
于 2012-11-29T09:00:26.087 回答
3

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

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

if (folder.Exists)
{
    var files = folder.GetFiles(".png");
    files.toList().ForEach(f=>File.Move(from,to));
}
于 2012-11-29T09:07:05.160 回答
1

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

使用System.IO.Path类构建路径,它比连接字符串更好。您不必担心转义反斜杠。

于 2012-11-29T08:57:19.683 回答
1
i.ToString()

可能会帮助你。你正在路过

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

I 作为整数,因此连接不起作用,
而不是使用\\@像这样添加

from = @"E:\vid\(" + i + ").PNG";
于 2012-11-29T08:57:46.877 回答
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 目录以开始测试时,windows 剃掉了括号。(1).png 变为 1.png...我从该现象中得到了一个文件未找到错误...否则,您的代码是可靠的。我的版本几乎相同。

于 2012-11-29T10:21:06.187 回答
0
var folder = new DirectoryInfo(sourcefolder);

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

我相信这会有所帮助。

于 2014-09-15T18:07:59.923 回答