Pascal - 文件变量

时间:2016-06-17 10:02:10

标签: pascal

考虑以下简单代码来创建text.sys TEXT文件。

program MakeAFile;
var
 NewFile : TEXT;
 DummyVar : INTEGER;   
begin
 assign(NewFile,'text.sys');
 rewrite(NewFile);
 writeln('Some text...');
 DummyVar : 3;
 writeln('Some other text...');
 close(NewFile);
end.

我的问题是NewFile变量在整个运行时中的含义是什么?它是否包含了"一些文字......"然后将其传输到磁盘然后继续按住"其他一些文本..."并将它连续传输到磁盘?或者它保持两条线,当关闭(NewFile)时,它会立即转移两条线?如果是第二种情况,那么变量如何管理这样的两个值呢?我的意思是它必须是为NewFile变量保留的一些记忆,因为文件可能是未知的大。 谢谢!

2 个答案:

答案 0 :(得分:3)

以下内容应该有效。要写入该文件,您应该将其用作WritelnWrite的第一个参数。否则,文本将写入标准输出(通常是控制台)。

program MakeAFile;
var
  NewFile: Text;
  Dummyvar: Integer;
begin
  Assign(NewFile,'text.sys');
  Rewrite(NewFile);
  Writeln(NewFile, 'Some text...');
  DummyVar := 3;
  Writeln(NewFile, 'Some other text...');
  Writeln('This appears on the console');
  Close(NewFile);
end.

它是如何工作的?

FileText是实际上指向复杂记录的类型,其中包含例如文件句柄或类似文件,可能是指向文件的写入和/或读取指针,以及也许还有一些其他的簿记内容,比如文件名(如果在特定平台上需要)等等。Text类型还包含缓冲区和一些额外的簿记数据(例如缓冲区读或写指针)。

您写入文件的文本实际写入缓冲区(因为这比写入文件快得多),并且每次缓冲区已满时,缓冲区中的文本将写入文件和缓冲区被清除了。在Close()上,缓冲区中的剩余文本被写入文件(即刷新缓冲区)并关闭文件。

使用缓冲区意味着不是每写入一行,都必须访问该文件(因为这比写入缓冲区的内存慢得多),但只有当缓冲区已满时才会这样。

答案 1 :(得分:1)

当你执行NewFile : TEXT;时,你会告诉编译器在内存中分配一些空间来创建文本缓冲区。当您写入文件时,您实际上没有写入磁盘,而是写入缓冲区。如果缓冲区已满或者您关闭了文件,则缓冲区将写入磁盘。

您有一个程序Flush来手动清空缓冲区:FP documentation