2014-02-18 58 views
1

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

当我重写与更新的阵列的文件时,它不会将其正确写入(只写的记录一回正常,并记录的其余空白。

的代码读入数组是:

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); 

这是什么导致它不能正确地重写数组?

+0

时间的工具和使用数据库 –

+0

这是一个大学项目和考试委员会坚持不使用数据库:/ –

+0

难道他们还坚持使用传统的可怕帕斯卡尔I/O?太糟糕了。 –

回答

1

您的代码有两个问题。

  • 动态数组基于ZERO,并将它们索引为基于1的数组。
  • 寻求()调用是不需要的。
+0

啊,谢谢你指出,我会给它一个! –

+0

有一天试过了,现在它完美地工作,谢谢指出我的错误! –