通过' x'截断txt文件C#中的字节数

时间:2016-05-11 19:11:40

标签: c# byte line filestream truncate

我想在阅读完内容后删除文本文件的最后一行。文本文件非常大,因此由于性能问题,读取/写入不是一种选择。

我目前的想法是计算最后一行代表的字节数(以及进位返回)并截断文件。

我看到的许多选项都使用" Filestream.setLength()",我很困惑这是如何工作的。

这不会只是写回文件,而是以一定的字节数停止文件,因为'读取'函数读取字节,并将它们写回缓冲区?或者我可以在阅读时使用此功能,并移动"结束位置"返回文本文件,比方说24个字节?

这是我正在使用的当前代码

try
            { 
            //reading
            using (StreamReader reader = new StreamReader(filePath))
            {
                    while (!reader.EndOfStream)
                    {
                        //gets the line
                        line = reader.ReadLine();
                        if (!line.StartsWith("KeyWord", StringComparison.InvariantCultureIgnoreCase))
                        {
                            //add number of lines
                            lineCount += 1;
                        }
                        else
                        {
                            //Finds the occurence of the first numbers in a string
                            string resultString = Regex.Match(line, @"\d+").Value;
                            long lastLineBytes = 0;
                            foreach (char c in line)
                            {
                                //each char takes up 1 byte
                                lastLineBytes++;         
                            }
                            //carriage return
                            lastLineBytes += 2;
                            long fileLength = new FileInfo(filePath).Length;
                            Trace.WriteLine("The length of the file is " + fileLength);

                            //the size of the file - the last line
                            //truncate at this byte position, and we will be done. 
                            long newFileLength = fileLength - lastLineBytes;
                            //Truncation goes ehre
                        }
                }
          }
        }
        catch (Exception e)
        {
            throw e;
        }

1 个答案:

答案 0 :(得分:1)

如果更改流的大小,它将只重写文件表索引以指向左侧字节。

对于你的第二个问题,是的,你可以用它来阅读内容(在这个例子中我假设是ASCII编码,使用适当的编码器)。

FileStream str = //get the stream
byte[] data = new byte[str.Length];
str.Read(data, 0, data.Length);
string theContent = System.Text.Encoding.ASCII.GetString(data);