我想删除文本文件的最后两行。
我在论坛中发现了这个how to delete last line。我收到将字符串转换为字符串[]的重载错误。看了之后,我发现this建议使用数组。但两者都不适合我?!
最后我写了
string [] lines = File.ReadAllLines(PublicVariables.AddedFileName);
string [] newlines = new string[lines.Length-2];
for (int i=0; i<lines.Length - 2; ++i)
newlines[i] = lines[i];
File.WriteAllLines(PublicVariables.AddedFileName, newlines);
为什么当我使用那些给出的例子时,我不能和我合作? 我应该加点东西吗?
我有那些使用:
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Linq;
using System.Text;
using System.Windows.Forms;
using MySql.Data;
using MySql.Data.MySqlClient;
using System.Net.NetworkInformation;
using System.IO;
using System.Threading;
using System.Diagnostics;
答案 0 :(得分:1)
确保PublicVariables.AddedFileName
的类型为string
。
为了减少代码中出现错误的可能性并提高较大文件的性能,您可以通过以下方式替换代码:
string[] lines = File.ReadAllLines(PublicVariables.AddedFileName);
File.WriteAllLines(PublicVariables.AddedFileName,
lines.Take(lines.Length - 2));
lines.Take
使用Linq枚举数组,直到到达倒数第二个元素,这样就可以不在内存中复制数组(而不是在内存中复制两次)。
答案 1 :(得分:1)
您可以使用Array Resize来简化操作:
using System;
using System.IO;
using System.Text;
string [] lines = File.ReadAllLines(PublicVariables.AddedFileName);
Array.Resize(ref lines , lines.Length-2);
File.WriteAllLines(PublicVariables.AddedFileName, lines);
答案 2 :(得分:0)
可能是文件的句柄被锁定了,你试图用不同的句柄访问某个文件,试着在你写的时候更改文件的名称
File.WriteAllLines(PublicVariables.AddedFileName+"1", newlines);
答案 3 :(得分:0)
您发布的代码没有任何问题可能导致您说明的错误,因此问题必须在其他地方,但是,此代码应该更快:
string[] lines = File.ReadAllLines(PublicVariables.AddedFileName);
string[] newlines = new string[lines.Length - 2];
Buffer.BlockCopy(lines, 0, newlines, 0, newlines.Length);
File.WriteAllLines(PublicVariables.AddedFileName, newlines);