C# 在C中移动文件#

C# 在C中移动文件#,c#,file,move,C#,File,Move,我正在将一些图像(文件名是(1).PNG,(2).PNG等等)从一个目录移动到另一个目录。我正在使用以下代码: for(int i=1;i

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

for(int i=1;i
但是,我得到以下错误:

mscorlib.dll中发生了类型为
System.IO.FileNotFoundException
的首次意外异常

System.IO.FileNotFoundException:找不到文件“E:\vid\(1.PNG”。

此外,我还计划重命名这些文件,以便转换后的文件名为
00001.png
00002.png
00101.png
等等

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

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

i.ToString()
也许对你有帮助。你通过了

from = "E:\\vid\\(" + i + ").PNG";
to = "E:\\ConvertedFiles\\" + i + ".png";
I为整数,因此串联不起作用
不要使用
\\
,而是像这样添加
@

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

我建议您使用
“@”
,以便以更可读的方式避开斜杠。还可以使用
Path.combined(…)
来连接路径,并使用
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
    }
}
for(int i=1;i
为什么不使用这样的东西

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

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

我刚刚在VisualStudio中运行了这个。成功了

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
                    }
                }
            }
        }
    }

}
使用系统;
使用System.IO;
使用System.Collections.Generic;
使用System.Linq;
使用系统文本;
命名空间控制台应用程序2
{
班级计划
{
静态void Main()
{
int n=3;
对于(int i=1;i
也许当您将文件移动到vid目录以开始测试时,windows删除了括号。(1) .png变为1.png。。。我得到了一个文件找不到错误的现象。。。否则,您的代码是可靠的。我的版本几乎相同

var folder = new DirectoryInfo(sourcefolder);

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

我相信这会有帮助。

愚蠢的问题,但是你确定“E:\vid(1).PNG”存在吗?
找不到文件“E:\vid(1).PNG”
但是你的代码说
E:\\vid\\\(1).PNG
-所以这里的某个地方缺少一个斜线,不是吗?有问题:你的代码希望文件名为
(\u num).png
并驻留在
E:\vid
目录中。错误消息表示您正试图“查找”E:\`目录中的文件
vid(\u num).png
。因此,错误消息和代码不匹配。请确保您发布了匹配的实际代码和错误消息。上面的代码有错误吗?您试图移动的文件名为
(1).png
,位于文件夹
E:\vid
中,而不是
E:\vid(1).png
。哪个是正确的?
ToString()
在与字符串连接时被隐式调用。如果这是问题所在,他的代码甚至无法编译。