0

我的程序读取注册表项值并将这些值与安装路径结合起来。我还从注册表中读取了安装路径。

String dllInstpath = installPath + rKey等于: C:\Program Files (x86)\NSi\AutoStore Workflow 6\HpOXPdCaptureRes.dll

然后我使用FileVersionInfo上面的字符串HpOXPdCaptureRes.dll从它的安装路径中获取文件信息并将所有值写入记事本。

我的问题是 TRUE dll 名称在文件名中没有“Res”。注册表只有文件名中带有“Res”的文件名。我需要做的是从文本文件中读取并找到所有“Res”并将它们从记事本文件中的文本行中删除。

所以输出应该是这样的:

当前的: HpOXPdCaptureRes.dll

新的: HpOXPdCapture.dll

我已在线阅读,我认为最好的方法是使用ReadAllLinesWriteAllLines. 但是我不确定如何实现查找和替换。我已经看到很多关于如何删除空格、无效字符等的示例,但是我无法找到我需要的示例。

概括:

  • 读取文本文件
  • 在所有文本Res行中都可以并删除
  • 保留当前文本文件,即删除Res并关闭文件

任何帮助是极大的赞赏。

谢谢!

4

4 回答 4

0

如果您要替换的字符串保证在字符串中是唯一的 - 例如字符串末尾的“res.dll” - 那么您可以使用类的Replace方法进行String替换:

List<string> lines = File.ReadAllLines(sourceFile);
lines = lines.select(l => l.Replace("res.dll", ".dll").ToList();

或者如果区分大小写是一个问题:

lines = lines.Select(l => l.Substring(l.Length - 7).ToLower() == "res.dll" ? l.Substring(0, l.Length - 7) + ".dll" : l).ToList();

对于更复杂的情况,您可能需要使用正则表达式来标识要替换的字符串部分。或者您可能想要拆分字符串 int 路径和文件名,修改文件名并将其重新连接在一起。

于 2013-02-18T23:14:35.393 回答
0

您可以使用File.ReadAllLinesFile.WriteAllLines

例子:

读取所有行并替换每行所需的值,然后再次写入行

File.WriteAllLines("textFilePath",File.ReadAllLines("textFilePath").Select(line => line.Replace("Res.dll", ".dll")));
于 2013-02-18T23:07:47.000 回答
0

只需打开文件并使用“File.ReadAllLines”读取所有行。然后使用Replace删除Res

string[] lines = File.ReadAllLines("yourFileName");
var output = lines.Select(x => x.Replace("Res.dll", ".dll")).ToArray();

要稍后将它们保存回来,您可以使用File.WriteAllLines

File.WriteAllLines("yourFileName", output);
于 2013-02-18T23:07:56.700 回答
0

从文件中读取所有内容,替换所有出现的“res”并写入文件:

        String filename = "fileName";

        StreamReader sr = new StreamReader(filename);
        String content = sr.ReadToEnd();
        sr.Close();

        StreamWriter sw = new StreamWriter(filename);
        sw.Write(content.Replace("res", ""));
        sw.Close();
于 2013-02-18T23:11:12.740 回答