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

Text 使用pascal在文本文件中写入时出错,text,runtime-error,pascal,Text,Runtime Error,Pascal,我正在尝试编写一个创建和更新库存的过程,但是每次我尝试运行程序时,都会出现运行时错误,程序会自动关闭,而且它似乎没有创建任何文本文件,我不确定问题可能是什么,也不确定如何解决,因此非常感谢您的帮助 这是程序 procedure inventary(arch:string); var f:text; op:char; key,name,desc:string; begin assign (f,arch); if eof(f) then rewr

我正在尝试编写一个创建和更新库存的过程,但是每次我尝试运行程序时,都会出现运行时错误,程序会自动关闭,而且它似乎没有创建任何文本文件,我不确定问题可能是什么,也不确定如何解决,因此非常感谢您的帮助

这是程序

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;

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


如果您使用的是Delphi,您可以使用
函数FileExists(const FileName:string):Boolean测试文件的存在性
,否则您应该尝试
追加
,如果失败,则执行
重写

,这可能是从传统的TP方式派生的,用于检查文件是否存在(afaik仍在和FPC中工作)


但一般来说,除非你对考古学感兴趣,否则fileexists()更好。

+1表示fileexists。应该使用它,而不是旧的TP方式。IIRC即使是后来的TP也有一个文件存在于电视的某个地方。
  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.
   assign(f,name); // or assignfile in Delphi 
   {$I-}
    reset(f);
   {$I+}
   if ioresult=0 then
      begin
       /// open succesful