Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/file/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Arrays Delphi重写.dat文件_Arrays_File_Delphi_Rewrite - Fatal编程技术网

Arrays Delphi重写.dat文件

Arrays Delphi重写.dat文件,arrays,file,delphi,rewrite,Arrays,File,Delphi,Rewrite,我正在使用Delphi并试图重写一个存储书籍记录的.dat文件。其中一个变量是.BookAmountAvailable,当取出一本书时,我希望它将该记录的.BookAmountAvailable降低1,我已将该文件读入一个键入的数组,然后找到正确的书并将可用量降低1 当我用更新的数组重写文件时,它没有正确地写入(它只正确地写回一条记录,其余的记录保留为空) 要读入数组的代码是: assignfile (BookFile,'BookFile.dat'); reset (BookFile); Boo

我正在使用Delphi并试图重写一个存储书籍记录的.dat文件。其中一个变量是.BookAmountAvailable,当取出一本书时,我希望它将该记录的.BookAmountAvailable降低1,我已将该文件读入一个键入的数组,然后找到正确的书并将可用量降低1

当我用更新的数组重写文件时,它没有正确地写入(它只正确地写回一条记录,其余的记录保留为空)

要读入数组的代码是:

assignfile (BookFile,'BookFile.dat');
reset (BookFile);
BookCounter := FileSize(BookFile);
SetLength(BookArray, BookCounter);
for Count1 := 1 to BookCounter  do
  begin
    read(BookFile, SingleBook);
    BookArray[Count1] := SingleBook;
  end;
closefile (BookFile);
我用来重写文件的代码是:

  BookArray[Count].BookAmountAvailable := BookArray[Count].BookAmountAvailable -1;
  assignfile (BookFile, 'BookFile.dat');
  rewrite (BookFile);
  for Count1 := 1 to BookCounter do
    begin
      seek (BookFile, Count1);
      write(BookFile, BookArray[Count1]);
    end;
  closefile (BookFile);

是什么导致它无法正确重写数组?

您的代码有两个问题

  • 动态数组是基于零的,您可以将它们作为基于1的数组进行索引
  • 不需要Seek()调用

是时候工具化和使用数据库了这是为了一个大学项目,考试委员会坚持不使用数据库:/n他们也坚持你使用糟糕的传统Pascal I/O吗?太糟糕了。这里没有人能确切地告诉你程序中的问题。即使有人可以,答案对互联网上的任何人都没有用处,因为没有其他人您遇到问题的人可以搜索某个内容并到达此处寻求答案。您需要使用调试器来调查该问题。请尝试使用较小的案例,直到找到问题为止。您也可以尝试将您的程序带到讲师处,并向他或她寻求帮助。您为什么要寻求帮助?当您写入时,文件指针会前进e、 前几天试过了,现在效果很好,谢谢你指出我的错误!