使用pascal在文本文件中写入时出错

时间:2013-09-17 23:14:06

标签: text runtime-error pascal

我正在尝试编写一个创建和更新Inventory的过程,但每次我尝试运行该程序时,都会遇到运行时错误并且程序自行关闭,并且似乎没有创建任何文本文件,我不确定问题可能是什么或如何解决,所以帮助会非常苛刻。

这是程序

procedure inventary(arch:string);
var f:text;
    op:char;
    key,name,desc:string;
begin
     assign (f,arch);

     if eof(f) then
        rewrite(f)
         else
      append(f);
                 writeln('Article key');
                 readln(key);
                 writeln('Article name');
                 readln(name);
                 writeln('article description');
                 readln(desc);
                 write(f,key,',',name,',',desc,',');
                 op:='s';
           while (op <> 'n') or (op <> 'N') do
            begin
                 writeln('add another product? y/n');
                 readln(op);
                 if (op = 'y') or (op = 'Y') then
                 begin
                  writeln('Article key');
                 readln(key);
                 writeln('Article name');
                 readln(name);
                 writeln('article description');
                 readln(desc);
                 write(f,key,',',name,',',desc,',');
                 end
                 else
                 writeln('bye');
                 readln();

            end;

close(f);
readln();
end;

程序我正在测试它:

  uses proyectounit;
    var
    arch:string;
    c:char;
    begin
    writeln('Name of the inventary');
    readln(arch);
    Writeln('Do you wish to add a product');
    readln(c);
    if c='s' then
    inventary(arch+'.txt');
    Writeln('Do you wish to change something?');
    readln(c);
    if c='s' then
    cambios(arch+'.txt','001');
    writeln('end');
    readln;
    end.

2 个答案:

答案 0 :(得分:0)

您不能以这种方式使用eof功能,它仅适用于打开文件。从帮助中: Eof(F)测试当前文件位置是否为文件结尾。 F是一个已打开以供阅读的文件变量。

如果您使用的是Delphi,则可以使用function FileExists(const FileName: string):Boolean;测试文件的存在,否则您应该尝试append,如果失败则执行rewrite

答案 1 :(得分:0)

这可能来自检查文件存在的经典TP方式(afaik仍可在Delphi和FPC中使用)

   assign(f,name); // or assignfile in Delphi 
   {$I-}
    reset(f);
   {$I+}
   if ioresult=0 then
      begin
       /// open succesful

但一般情况下,除非你进入考古学,否则fileexists()会更好。