我目前可以刪除使用一個文本文件的最後一行:刪除一個文本文件在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