2011-06-29 70 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。 –