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“...行。我不想覆盖一个文件中的内容再次提交新文件。给我一个解决方案。谢谢。
答案 0 :(得分: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());
}
答案 1 :(得分:0)
如果您不介意使用gnu工具,可以使用sed http://en.kioskea.net/faq/1451-sed-delete-one-or-more-lines-from-a-file
答案 2 :(得分:0)
技术上不可能,就像我所知道的那样,因为操作系统会创建一个新的IO工件。(顺便说一句,这个不是很确定)。
但更重要的是,非常危险。 IO操作是失败的主题,因此您必须以某种方式保证您的操作存档一致性。
这样做的一种可行方法是:
答案 3 :(得分:0)
无论您使用什么实用程序或编写什么代码,操作系统都会创建一个新文件来执行此操作。