C# 在不加载到内存的情况下获取/删除文件的最后一个字符

C# 在不加载到内存的情况下获取/删除文件的最后一个字符,c#,C#,如何获取文件中的最后一个字符,如果它是某个字符,则在不将整个文件加载到内存的情况下将其删除 这就是我目前所拥有的 using (var fileStream = new FileStream("file.txt", FileMode.Open, FileAccess.ReadWrite)){ fileStream.Seek(-1, SeekOrigin.End); if (Convert.ToChar(fileStream.ReadByte()) == ']') { // H

如何获取文件中的最后一个字符,如果它是某个字符,则在不将整个文件加载到内存的情况下将其删除

这就是我目前所拥有的

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
  }

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

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

您可以将文件流的位置设置为最后一个字节,然后查看它是什么。然后使用Douglas Solution将其删除:

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

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