我有一个包含.pdf
个文件的文件夹。在大多数文件的名称中,我想用另一个字符串替换特定的字符串。
这是我写的。
private void btnGetFiles_Click(object sender, EventArgs e)
{
string dir = tbGetFIles.Text;
List<string> FileNames = new List<string>();
DirectoryInfo DirInfo = new DirectoryInfo(dir);
foreach (FileInfo File in DirInfo.GetFiles())
{
FileNames.Add(File.Name);
}
lbFileNames.DataSource = FileNames;
}
这里我提取列表框中的所有文件名。
private void btnReplace_Click(object sender, EventArgs e)
{
string strReplace = tbReplace.Text; // The existing string
string strWith = tbWith.Text; // The new string
string dir = tbGetFIles.Text;
DirectoryInfo DirInfo = new DirectoryInfo(dir);
FileInfo[] names = DirInfo.GetFiles();
foreach (FileInfo f in names)
{
if(f.Name.Contains(strReplace))
{
f.Name.Replace(strReplace, strWith);
}
}
在这里我想做替换,但出了点问题。什么?
答案 0 :(得分:5)
听起来您想要更改磁盘上文件的名称。如果是这样,那么您需要使用File.Move
API而不是更改实际字符串,即文件名。
您正在犯的另一个错误是Replace
来电。 .Net中的string
是不可变的,因此所有变异的API(如Replace
)都会返回新的string
而不是更改旧的string newName = f.Name.Replace(strReplace, strWith);
File.Move(f.Name, newName);
。要查看更改,您需要将新值分配回变量
{{1}}
答案 1 :(得分:2)
f.Name是一个只读属性。 f.Name.Replace(..)只返回一个包含所需文件名的新字符串,但实际上从未更改过该文件 我建议以下内容,但我没有测试过:
File.Move(f.Name, f.Name.Replace(strReplace, strWith));
答案 2 :(得分:1)
替换返回另一个字符串,它不会更改原始字符串 所以你需要写
string newName = f.Name.Replace(strReplace, strWith);
当然这不会改变磁盘上文件的名称 如果这是你的意图那么你应该看看
File.Move(f.Name, newName);
还要记住,如果目标文件存在,File.Move将失败并出现异常。
答案 3 :(得分:0)
乍一看,似乎你没有将被替换的字符串重新分配给你的f.Name变量。试试这个:
string NewFileName = f.Name.Replace(strReplace, strWith);
File.Copy(f.Name, NewFileName);
File.Delete(f.Name);
答案 4 :(得分:0)
当您致电string.Replace
时,这不会改变您现有的字符串。相反,它返回一个新字符串。
您需要将代码更改为以下内容:
if(f.Name.Contains(strReplace))
{
string newFileName = f.Name.Replace(strReplace, strWith);
//and work here with your new string
}