Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/jsp/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Stream 有效地从文件中去除一些ASCII码?_Stream_Char_Ascii_Filestream_Memory Mapped Files - Fatal编程技术网

Stream 有效地从文件中去除一些ASCII码?

Stream 有效地从文件中去除一些ASCII码?,stream,char,ascii,filestream,memory-mapped-files,Stream,Char,Ascii,Filestream,Memory Mapped Files,我有一个100mb的磁盘文件(最高可达300mb)。有空字符和其他一些控制字符不应该在其中。首先,我将字符串读入内存,然后逐字符重新读取,然后删除有问题的字符,将干净的内容放入StringBuilder中,然后对其执行ToString操作 这当然会占用太多的内存。我需要弄清楚如何去掉磁盘上坏的ASCII值。可能(.NET 4)内存映射文件流是正确的(我不久前检查过这个) 所有想法都受到赞赏。谢谢。如果需要缩小文件以删除坏字符,只需一次读取一个字符或块中的文件,然后跳过坏字符将其写入新文件。 这也

我有一个100mb的磁盘文件(最高可达300mb)。有空字符和其他一些控制字符不应该在其中。首先,我将字符串读入内存,然后逐字符重新读取,然后删除有问题的字符,将干净的内容放入StringBuilder中,然后对其执行ToString操作

这当然会占用太多的内存。我需要弄清楚如何去掉磁盘上坏的ASCII值。可能(.NET 4)内存映射文件流是正确的(我不久前检查过这个)


所有想法都受到赞赏。谢谢。

如果需要缩小文件以删除坏字符,只需一次读取一个字符或块中的文件,然后跳过坏字符将其写入新文件。
这也给你一个撤销


如果您可以替换错误字符以使文件长度不变,则映射文件并扫描内存,将每个错误字符替换为eg空格(ascii 32)。这是最简单的,而且可能更快-但无论哪种方式,您都将被原始磁盘i/o控制,您需要删除并重新排序文件,还是可以用空格替换坏字符以保持相同的长度?我可以用String.Empty替换坏字符,因为它们大部分是空字符和制表符。为什么不直接写入输出文件?没有理由一次将整个输出存储在内存中。我没有直接写入文件,因为我不知道如何进行写入。是否同时在同一文件上打开StreamReader和StreamWriter?也许我想得太多了,但我很困惑你有没有关于如何实现这一点的示例(伪代码或真实代码)?