我正在将一些图像(文件名为(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,依此类推。
答案 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));
}
我相信这会有所帮助。