5

我有一个包含文件的文件夹.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);
            }

        }

在这里我想做替换,但是出了点问题。什么?

4

5 回答 5

7

听起来您想更改磁盘上文件的名称。如果是这样,那么您需要使用File.MoveAPI 而不是更改作为文件名的实际字符串。

您犯的另一个错误是Replace调用本身。.Net 中的Astring是不可变的,因此所有变异的 API 都像Replace返回一个新的string而不是更改旧的。要查看更改,您需要将新值分配回变量

string newName = f.Name.Replace(strReplace, strWith);
File.Move(f.Name, newName);
于 2012-05-07T19:18:14.510 回答
2

f.Name 是一个只读属性。f.Name.Replace(..) 只返回一个带有您想要的文件名的新字符串,但从不实际更改文件。
我建议以下内容,尽管我还没有测试过:

File.Move(f.Name, f.Name.Replace(strReplace, strWith));
于 2012-05-07T19:18:55.357 回答
1

替换返回另一个字符串,它不会改变原始字符串。
所以你需要写

string newName = f.Name.Replace(strReplace, strWith); 

当然这不会改变磁盘上文件的名称。
如果这是你的意图,那么你应该看看

File.Move(f.Name, newName);

还要记住,如果目标文件存在,File.Move 将失败并出现异常。

有关示例,请参见此处

于 2012-05-07T19:18:07.463 回答
0

乍一看,您似乎没有将替换的字符串重新分配给 f.Name 变量。尝试这个:

string NewFileName = f.Name.Replace(strReplace, strWith);
File.Copy(f.Name, NewFileName);
File.Delete(f.Name);
于 2012-05-07T19:17:42.270 回答
0

当您调用string.Replace它时,它不会改变您现有的字符串。相反,它返回一个新字符串。

您需要将代码更改为以下内容:

if(f.Name.Contains(strReplace)) 
{ 
    string newFileName = f.Name.Replace(strReplace, strWith); 
    //and work here with your new string
}
于 2012-05-07T19:22:25.637 回答