2011-06-29 37 views
1

我正在编写一些遗留代码,其中有WriteLn(F,'...')命令的很多分散在各处。这些命令中有一些有用的信息(包含哪些信息变量等),所以我不想删除它或将其注释掉,但我想停止程序写入文件。如何“禁用”文件输出流

是否有任何方法可以分配F变量,以便写入的任何内容都被忽略?我们使用控制台输出,所以这不是一个选项。

回答

4

回到很长时间DOS的美好时光 - 如果您将'f'赋予设备'nul',那么应该没有输出。

assign (f, 'nul') 

我不知道这是否仍然适用于Windows。

编辑: 例如,您也可以将'f'分配给文件 - assignfile(f,'c:\ 1.txt')。

+0

您的编辑:问题说“停止程序写入文件”。作为一个说明,它现在是AssignFile(F,[...]),而不是分配 – Despatcher

+0

我会试试这个并且回复你。 – boileau

+0

它的工作:)谢谢。 – boileau

0

打开空设备,让输出到那里可能会工作。在DOS环境下,NUL设备的性能非常糟糕(据我所知,它没有被缓冲,因此系统在处理每个字节时不得不在设备表中查找NUL),但我不会感到惊讶如果它在新系统下得到改进。无论如何,除非你真的需要最大化性能,否则这可能是最容易做的事情。如果性能至关重要,理论上可能会重写WriteLn函数,因此它对某些文件没有任何作用,但不幸的是我相信它允许语法形式不允许用于任何用户定义的函数。

否则,我会建议做一个正则表达式查找/替换,以可以机械方式恢复的方式注释掉WriteLn语句。

+0

'cat HugeISOFile.iso> NUL'返回相当快;我确定使用'NUL'没有任何性能问题! –

+0

@Cosmin Prund:在Unix变体下,可能。不确定在Windows下。无论如何,我不希望任何人依赖这个解决方案而不进行测试,以确保它能够工作,因为在DOS下,将输出发送给NUL实际上比将它发送到硬盘驱动器文件要慢! – supercat

+0

我在Windows上运行了'cat',而不是Unix。 –