2013-01-20 105 views
2

是否可以使用1 assign()来读写文件?是否可以读取和写入文件只打开一次?

我的意思是这样的:

assign(fl, 'file.txt'); 
reset(fl) 
// I know, that when I use reset - I have only read permission, 
// but is there any other option to read and write opening the file only once? 
read(fl, variable); 
write(fl, 'asdf); 
close(fl); 
+0

您的问题不明确,因为您没有描述FL的类型。如果是文本(文件),则不存在这种方式。 –

回答

4

Reset不给你只读访问;至少在Delphi的Pascal中,默认是读/写(FileMode = 2),FP与它很相容。

从帮助主题上FileMode重点煤矿):

表示类型化和复位的过程打开无类型文件的访问模式。

在Delphi代码中,FileMode确定使用Reset过程打开打字和非打字文件(不是文本文件)时要使用的访问模式。

可以分配给FileMode变量的文件打开模式在System.SysUtils的常量列表中定义。 默认的FileMode是2(读/写访问)。将另一个值分配给FileMode会导致所有后续复位使用该模式。

+0

请注意“NOT textfiles”。在例子中他使用writeln写文本。而且filemode是共享行为,因此不适用于使用相同句柄的读/写。 –

+0

@Marco:这很好,但没有任何迹象表明(文件名除外)该文件是以“TextFile”打开的。 (缺少'f1'的声明,这将决定它是哪种类型的文件,并且文本文件通常(但不总是)使用'WriteLn'和'ReadLn'写入和读取。)您可能是对的,但是。再次,很好的捕获。 :-) –

+0

如果你非常无聊,我可以帮你找到一份FPC错误检测器的工作:-)无论如何,重点是共享模式读/写和文件类型级读/写是两回事 –

0

由于您的问题是一般性问题,您没有说出将在文件中存储什么样的数据。如果您将文件定义为“TRecord文件”(您必须首先定义您的记录类型),那么首先您需要“重置”该文件以将其打开;之后,您可以使用预定义的过程'seek'在文件中查找特定记录,将数据读入TRecord类型的局部变量,更改该记录并将其写回文件。该文件的当前位置将是您刚刚阅读的记录的位置。

读取和写入文本文件更加棘手 - 存在预定义的过程“append”,它允许将文本添加到文件末尾(但不在中间)。

三十年前,我曾经使用这样的系统来创建我自己的数据库;幸运的是,现在数据库编程要简单得多。