在 C# 中移动文件
Posted
技术标签:
【中文标题】在 C# 中移动文件【英文标题】:Move files in C# 【发布时间】:2012-11-17 07:14:40 【问题描述】:我正在将一些图像(文件名是(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.FileNotFoundException
类型的第一次机会异常发生在 mscorlib.dll 中
System.IO.FileNotFoundException: Could not find file 'E:\vid\(1).PNG'.
另外,我打算重命名文件,以便转换后的文件名为00001.png
、00002.png
、...00101.png
等等。
【问题讨论】:
愚蠢的问题,但你确定“E:\vid(1).PNG”存在吗?Could not find file 'E:\vid(1).PNG'
但您的代码显示 E:\\vid\\(1).png
- 所以这里某处缺少斜线,不是吗?
出了点问题:您的代码需要将文件命名为(_num_).png
并位于E:\vid
目录中。错误消息表明您试图在 `E:\` 目录中“查找”文件 vid(_num_).png
。所以错误信息和代码不匹配。请确保您发布了匹配的实际代码和错误消息。
上面的代码有问题吗?您尝试移动的文件在文件夹E:\vid
内命名为(1).png
,而不是E:\vid(1).png
。哪个是正确的?
【参考方案1】:
异常意味着文件E:\vid(1).PNG
不存在。你的意思是E:\vid1.PNG
?
使用System.IO.Path
类来构建路径,它比连接字符串更好。您不必担心转义反斜杠。
【讨论】:
【参考方案2】:i.ToString()
可能会帮助你。你路过
from = "E:\\vid\\(" + i + ").PNG";
to = "E:\\ConvertedFiles\\" + i + ".png";
I 作为整数,因此连接不起作用
而不是使用\\
,而是像这样添加@
from = @"E:\vid\(" + i + ").PNG";
【讨论】:
ToString()
在与字符串连接时被隐式调用。如果这是问题所在,他的代码甚至无法编译。【参考方案3】:
我建议您使用'@'
以便以更易读的方式转义斜杠。也可以使用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
【讨论】:
【参考方案4】:你为什么不使用这样的东西?
var folder = new DirectoryInfo(@"E:\vid\"));
if (folder.Exists)
var files = folder.GetFiles(".png");
files.toList().ForEach(f=>File.Move(from,to));
【讨论】:
【参考方案5】:我刚刚在 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...我从该现象中得到了一个文件未找到错误...否则,您的代码是可靠的。我的版本几乎相同。
【讨论】:
【参考方案6】:var folder = new DirectoryInfo(sourcefolder);
if (folder.Exists)
var files = folder.GetFiles("*.png");
files.ToList().ForEach(f => File.Move(sourcefolder + f, newFolderName + f));
我相信这会有所帮助。
【讨论】:
以上是关于在 C# 中移动文件的主要内容,如果未能解决你的问题,请参考以下文章