我目前可以删除使用一个文本文件的最后一行:删除一个文本文件在C#中的第一行
var lines = System.IO.File.ReadAllLines("test.txt");
System.IO.File.WriteAllLines("test.txt", lines.Take(lines.Length - 1).ToArray());
虽然,怎么可能,而不是删除文本文件的开头?
我目前可以删除使用一个文本文件的最后一行:删除一个文本文件在C#中的第一行
var lines = System.IO.File.ReadAllLines("test.txt");
System.IO.File.WriteAllLines("test.txt", lines.Take(lines.Length - 1).ToArray());
虽然,怎么可能,而不是删除文本文件的开头?
而不是lines.Take
您可以改用,lines.Skip
,如:
var lines = File.ReadAllLines("test.txt");
File.WriteAllLines("test.txt", lines.Skip(1).ToArray());
在年初尽管使用的技术(阅读所有文字,写一切恢复)截断是非常低效的。
关于高效方式:低效率来自将整个文件读入内存的必要性。另一种方式很容易就是在流中查找并将流复制到另一个输出文件,删除原始文件并重命名旧文件。那一个会同样快,但消耗更少的内存。
最后截断文件要容易得多。你可以找到trunaction的位置,并致电FileStream.SetLength()
。
效率低是的 - 但有什么办法来截断文件的开始? –
是的,你只是省略写我的答案中所述。 –
@ssg:如果您省略了写作部分,那么文件如何更新?我假设我错过了一些东西...... – Chris
var lines = System.IO.File.ReadAllLines("test.txt");
System.IO.File.WriteAllLines("test.txt", lines.Skip(1).ToArray());
Skip
消除了来自开始序列元件的给定数。 Take
消除了该序列的除末端以外的所有元素。
这里是一个另类:
using (var stream = File.OpenRead("C:\\yourfile"))
{
var items = new LinkedList<string>();
using (var reader = new StreamReader(stream))
{
reader.ReadLine(); // skip one line
string line;
while ((line = reader.ReadLine()) != null)
{
//it's far better to do the actual processing here
items.AddLast(line);
}
}
}
更新
如果你需要一个IEnumerable<string>
,不想浪费内存,你可以做这样的事情:
public static IEnumerable<string> GetFileLines(string filename)
{
using (var stream = File.OpenRead(filename))
{
using (var reader = new StreamReader(stream))
{
reader.ReadLine(); // skip one line
string line;
while ((line = reader.ReadLine()) != null)
{
yield return line;
}
}
}
}
static void Main(string[] args)
{
foreach (var line in GetFileLines("C:\\yourfile.txt"))
{
// do something with the line here.
}
}
从文本文件中删除第一行
System.IO.StreamReader file = new System.IO.StreamReader(filePath);
string data = file.ReadToEnd();
file.Close();
data = Regex.Replace(data, "<.*\n", "");
System.IO.StreamWriter file = new System.IO.StreamWriter(filePath, false);
file.Write(data);
file.Close();
正则表达式在这种情况下确实是过度杀伤性的 – mike
也许不是你正在寻找的答案,但如何将表示第一行的字节替换为NULL?下一次,你可以File.ReadAllLines,它会跳过所有的初始NULL字节 – Polity