C#海量文件重命名器

C#海量文件重命名器,c#,file,io,C#,File,Io,我想创建C#mass文件重命名器,这是我的UI 我已经创建了tes文件夹,在tes里面有一个文件1.txt 我想创建我的程序,为文件添加前缀和后缀,这样1.txt将成为 prefix1suffix 但后来我犯了一个错误 据说文件已经存在,虽然tes文件夹中只有一个文件,那就是1.txt如何使它工作?错误来自哪里 我尝试了以下代码 private void Rename(string prefix, string filepath, string suffix) {

我想创建C#mass文件重命名器,这是我的UI

我已经创建了
tes
文件夹,在
tes
里面有一个文件
1.txt

我想创建我的程序,为文件添加前缀和后缀,这样
1.txt
将成为
prefix1suffix

但后来我犯了一个错误

据说
文件已经存在
,虽然
tes
文件夹中只有一个文件,那就是
1.txt
如何使它工作?错误来自哪里

我尝试了以下代码

private void Rename(string prefix, string filepath, string suffix)
    {            
        //i don't use prefix suffix yet to make sure if my function works
        DirectoryInfo d = new DirectoryInfo(filepath);
        FileInfo[] file = d.GetFiles();

        try
        {
            foreach (FileInfo f in file )
        {
            File.Move(f.FullName,"stackoverflow");
        }
        }
        catch (Exception e)
        {
            cmd.cetakGagal(e.ToString(), title);
        }
        cmd.cetakSukses("Rename Success", title);
    }
它返回与上面第二张图片相同的错误

下图是
tes
文件夹,除了
1.txt


上面的代码将给出该错误,因为在第一次运行之后,“stackoverflow”作为文件存在。在调用file.Move之前,请确保检查目标文件是否存在(使用
file.exists
)。

上述代码将显示该错误,因为在第一次运行后,“stackoverflow”作为文件存在。在调用file.Move之前,请确保检查目标文件是否存在(使用
file.exists
)。

您的
文件.Move
正在将它们全部更改为StackOverflow,而不使用前缀和后缀。如果目录中只有一个文件,那就不成问题了。您确定只有一个文件吗

public static void Move(
    string sourceFileName,
    string destFileName
)
在为目标文件指定相对路径时,查看这一点可能就是线索。要获取当前工作目录,请参阅

允许sourceFileName和destFileName参数指定 相对或绝对路径信息。相对路径信息为 解释为相对于当前工作目录

你应该改变

File.Move(f.FullName,"stackoverflow");


您的
文件.Move
正在将它们全部更改为StackOverflow,而不使用前缀和后缀。如果目录中只有一个文件,那就不成问题了。您确定只有一个文件吗

public static void Move(
    string sourceFileName,
    string destFileName
)
在为目标文件指定相对路径时,查看这一点可能就是线索。要获取当前工作目录,请参阅

允许sourceFileName和destFileName参数指定 相对或绝对路径信息。相对路径信息为 解释为相对于当前工作目录

你应该改变

File.Move(f.FullName,"stackoverflow");


您正在调用
File.Move()
,其中包含
sourceFileName
的完整路径和
destFileName
的相对路径。相对文件路径相对于当前工作目录,而不是源文件路径。我希望当前工作目录中存在一个
stackoverflow
文件,该文件很可能是在您第一次运行此代码时创建的。

您正在调用
file.Move()
,其中包含
源文件名的完整路径和
目标文件名的相对路径。相对文件路径相对于当前工作目录,而不是源文件路径。我希望当前工作目录中存在一个
stackoverflow
文件,很可能是在您第一次运行此代码时创建的。

由于您的目标是重命名,我建议使用一个充满文件的测试文件夹,而不是使用零碎的方法。看看这样做是否有帮助:

private void Rename(string prefix, string filepath, string suffix)
    {            
        //i don't use prefix suffix yet to make sure if my function works
        DirectoryInfo d = new DirectoryInfo(filepath);
        FileInfo[] file = d.GetFiles();

        try
        {
            foreach (FileInfo f in file )
        {
            f.MoveTo(@filepath + @"\" + prefix + f.Name.Insert(f.Name.LastIndexOf('.'),suffix));
        }
        }
        catch (Exception e)
        {
            cmd.cetakGagal(e.ToString(), title);
        }
        cmd.cetakSukses("Rename Success", title);
    }

另一方面,在提交文件名和更改之前,使用listview显示文件名和更改将有助于防止不必要的更改。

由于您的目标是重命名,我建议使用充满文件的测试文件夹,而不是使用零碎的方法。看看这样做是否有帮助:

private void Rename(string prefix, string filepath, string suffix)
    {            
        //i don't use prefix suffix yet to make sure if my function works
        DirectoryInfo d = new DirectoryInfo(filepath);
        FileInfo[] file = d.GetFiles();

        try
        {
            foreach (FileInfo f in file )
        {
            f.MoveTo(@filepath + @"\" + prefix + f.Name.Insert(f.Name.LastIndexOf('.'),suffix));
        }
        }
        catch (Exception e)
        {
            cmd.cetakGagal(e.ToString(), title);
        }
        cmd.cetakSukses("Rename Success", title);
    }

另外,在提交文件名和更改之前,使用列表视图显示文件名和更改将有助于防止不必要的更改。

是的,我确信只有一个文件,请查看我更新的屏幕截图。我可以在不移动em的情况下重命名同一文件夹吗?@Cignitor如果在
foreach
循环中设置断点,调试会告诉你什么。具体来说,看看
文件
文件
是的,我确定只有一个文件,请查看我更新的屏幕截图。我可以在不移动em的情况下重命名同一文件夹吗?@Cignitor如果在
foreach
循环中设置断点,调试会告诉你什么。具体地说,查看
文件
文件
自己一步一步地检查代码,以找到出错时它试图从/移动到的文件。希望潜在的问题和解决方案会很明显。您没有使用前缀和后缀参数。如果你真的在方法中使用它们,你会神奇地看到你的问题得到了解决。你自己一步一步地检查代码,找到它出错时试图从/移动到的文件。希望潜在的问题和解决方案会很明显。您没有使用前缀和后缀参数。如果你真的在方法中使用它们,你会神奇地看到你的问题得到了解决。