0
FileName="1.pdf",filepath="f:/test1"
FileName="2.pdf",filepath="f:/test2"
FileName="3.pdf",filepath="f:/test3"
FileName="4.pdf",filepath="f:/test4"
FileName="5.pdf",filepath="f:/test5"
FileName="6.pdf",filepath="f:/test6"

我不想创建一个新文件。在同一个文件中覆盖是可以的

我尝试了以下。

var reader = File.OpenText("f:/test5");
reader. // ?

我不知道在读者之后放什么。如果有任何替代方法,请为我​​提供解决方案。我只想根据唯一文件名删除特定行。如果我有 5.pdf 作为文件名,那么我需要从文件中删除或删除 "FileName="5.pdf"...line 的整行。我不想覆盖文件中的内容又是新文件了,给我一个解决办法,谢谢。

4

4 回答 4

1

您不能在不重写文件的情况下从文本文件中删除一行。做这样的事情

string filename =
   Path.Combine(
       Environment.GetFolderPath(Environment.SpecialFolder.DesktopDirectory),
       "Test1.txt");

string[] lines = File.ReadAllLines(filename);
var list = new List<string>(lines);
list.RemoveAt(4);
File.WriteAllLines(filename, list.ToArray());

编辑:

您可以找到具有特定文件名的行,如下所示:

int index = list.FindIndex(s => s.EndsWith("/test5\""));
// Or whatever test is appropriate.

if (index >= 0) {
    list.RemoveAt(index);
    File.WriteAllLines(filename, list.ToArray());
}
于 2012-10-01T14:08:44.027 回答
0

如果您不介意使用 gnu 工具,可以使用 sed http://en.kioskea.net/faq/1451-sed-delete-one-or-more-lines-from-a-file

于 2012-10-01T14:07:26.180 回答
0

据我所知,这在技术上是不可能的,因为操作系统将创建一个新的 IO 工件。(顺便说一下,对此不太确定)。

但更重要的是,它非常危险。IO 操作可能会失败,因此您必须以某种方式保证文件操作的一致性

一种可能的方法是:

  • 将除要跳过的那些行之外的所有行写入新的 TEMP 文件
  • 用其他临时名称重命名旧文件
  • 以前一个文件的名称重命名第一个 TEMP 文件
  • 删除原始文件。
于 2012-10-01T14:08:43.043 回答
0

无论您使用什么实用程序或编写什么代码,操作系统总是会创建一个新文件来执行此操作。

于 2012-10-01T14:13:31.090 回答