C#mass文件重命名器

时间:2013-10-30 15:13:11

标签: c# file io

我想创建C#mass file renamer,这是我的UI enter image description here

我在tes内创建了tes文件夹,其中有一个1.txt文件。

我想创建我的程序来为文件添加前缀和后缀,因此1.txt将成为。prefix1suffix file already exist

然后我收到了一个错误 enter image description here

虽然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文件夹,{{1}}文件夹除{{1}}

外没有任何内容

enter image description here

4 个答案:

答案 0 :(得分:3)

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

答案 1 :(得分:1)

您的File.Move正在将所有内容更改为 StackOverflow 而不使用前缀和后缀。如果目录中只有一个文件,则不应该是一个问题。你确定只有1个文件吗?

public static void Move(
    string sourceFileName,
    string destFileName
)

当您指定目标文件的相对路径时,查看此answer可能是线索。要获取当前工作目录,请参阅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);
}

答案 2 :(得分:0)

上面的代码会给你这个错误,因为在第一次运行之后," stackoverflow"作为文件存在。在调用File.Move。

之前,请确保检查目标文件是否存在(使用File.Exists

答案 3 :(得分: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);
    }

在旁注上使用listview在提交之前显示文件名和更改将有助于防止不必要的更改。