【问题标题】:Get/delete last character of file without loading into memory获取/删除文件的最后一个字符而不加载到内存中
【发布时间】:2014-08-09 15:39:43
【问题描述】:

如何获取文件中的最后一个字符,如果是某个字符,删除它而不将整个文件加载到内存中?

这是我目前所拥有的。

using (var fileStream = new FileStream("file.txt", FileMode.Open, FileAccess.ReadWrite)){
  fileStream.Seek(-1, SeekOrigin.End);
  if (Convert.ToChar(fileStream.ReadByte()) == ']')
  {
    // Here to come deleting the character
  }

【问题讨论】:

  • 定义“字符”。文件有什么样的编码?
  • 一个字节很容易做到。一个字符要复杂得多,它取决于文件中的文本是如何编码的。一个字符可以占用 1 到 5 个字节。假设你知道如何处理这个问题,基本调用是 FileStream.Seek() 和 FileStream.SetLength()。
  • 我已经添加了到目前为止的内容。我发现了如何寻找,但不确定如何删除角色。有问题的字符是']',如我的代码所示。

标签: c#


【解决方案1】:

您可以将文件流的位置设置为最后一个字节并查看它是什么。然后使用道格拉斯解决方案将其删除:

using( FileStream fs = new FileStream( filePath, FileMode.Open ) )
        {
            fs.Position = fs.Seek( -1, SeekOrigin.End );
            if(fs.ReadByte() == ']' )
               fs.SetLength( fs.Length - 1 );
        }

【讨论】:

    【解决方案2】:

    如果您的文本文件被编码为 ASCII 或 UTF-8(其中] 将存储为单个字节),那么您可以将文件修剪一个字节:

    if (fileStream.ReadByte() == ']')
        fileStream.SetLength(fileStream.Length - 1);
    

    【讨论】:

      猜你喜欢
      • 2013-09-22
      • 2014-02-05
      • 2021-11-06
      • 2012-01-11
      • 2022-01-01
      • 1970-01-01
      • 2018-01-16
      • 2023-03-29
      • 1970-01-01
      相关资源
      最近更新 更多