我想创建C#mass file renamer,这是我的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
文件夹,{{1}}文件夹除{{1}}
答案 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在提交之前显示文件名和更改将有助于防止不必要的更改。