2011-05-10 42 views
0

你好,帕斯卡大师! 我有自定义记录的文件类型:帕斯卡 - 没有写入文件

DBCell = record 
    Name: string[10]; 
    Surname: string[15]; 
    Balance:integer; 
    OpenDate: record 
     year: integer; 
     month: 1..12; 
     day:1..31 
    end; 
    AccountN: string[10]; 
end; 
DBFile = file of DBCell; 

和功能,打开并加入新的元素到文件:

procedure Fopenf(var F:DBFile; var FName:string; var FOpened:boolean); 
begin 
    Assign(F,FName); 

    rewrite(F); 

    FOpened:=true; 
end; 

procedure InsN(var F:DBFile;var cell:DBCell;var FOpened:boolean); 
begin 
     Write(F,cell); 
     Close(F); 
     Rewrite(F); 
     Writeln('Added'); 
     FOpened:=false; 
end; 

问题是,没有什么实际写入到文件。我究竟做错了什么?

回答

1

的问题是InsN中的'重写'调用。 '重写'会创建一个新文件,所以通过在程序结束时调用它,您正在创建一个新的空文件!

2

从我完成任何Pascal开始已经很长时间了,但是IIRC Rewrite会截断文件。你应该使用Append

你不需要Rewrite()在文件中插入一条记录后:

procedure InsN(var F:DBFile;var cell:DBCell;var FOpened:boolean); 
begin 
    Write(F,cell); 
    Close(F); 
    Writeln('Added'); 
    FOpened:=false; 
end; 

如果你不想截断该文件每次打开它:

procedure Fopenf(var F:DBFile; var FName:string; var FOpened:boolean); 
begin 
    Assign(F,FName); 

    append(F); 

    FOpened:=true; 
end; 
+0

问题是,文件是空的。 – Arnthor 2011-05-11 03:05:23

+2

您不能附加()到自定义记录文件。不过,您可以重置()文件并将指针更改为结尾。无论如何,问题解决了,谢谢你的帮助。 – Arnthor 2011-05-11 10:12:22

+0

@Nordvind因为你的问题解决了,通过点击左边的大“V”来选择一些答案作为正确答案会很礼貌:) – brandizzi 2011-07-25 13:05:28