0

我想创建 C# 批量文件重命名器,这是我的 UI 在此处输入图像描述

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

我想创建我的程序来为文件添加前缀和后缀,所以1.txt会变成 prefix1suffix

但后来我得到了一个错误 在此处输入图像描述

据说file already exist虽然文件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文件夹,tes文件夹里面除了1.txt

在此处输入图像描述

4

4 回答 4

3

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

于 2013-10-30T15:23:40.153 回答
1

File.Move正在将它们全部更改为StackOverflow ,而不使用前缀和后缀。如果目录中只有一个文件,那应该不是问题。你确定只有1个文件吗?

public static void Move(
    string sourceFileName,
    string destFileName
)

在您指定目标文件的相对路径时,查看此答案可能是线索。要获取当前工作目录,请参阅GetCurrentDirectory

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

你应该改变

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

string fileName = f.Name.Replace(f.Extenstion,string.Empty);
string newFileName = string.Format("{0}{1}{2}",prefix,fileName,suffix);
string newFileWithPath = Path.Combine(f.Directory,newFileName);
if (!File.Exists(newFileWithPath))
{
     File.Move(f.FullName,newFileWithPath);
}
于 2013-10-30T15:17:29.290 回答
0

上面的代码会给你这个错误,因为在第一次运行之后,“stackoverflow”作为一个文件存在。确保File.Exists在调用 File.Move 之前检查目标文件是否存在(使用 )。

于 2013-10-30T15:16:51.970 回答
0

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

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

附带说明一下,使用列表视图在提交之前显示文件名和更改将有助于防止不必要的更改。

于 2013-10-30T17:45:11.257 回答