在turbo pascal 5.5中的旧IBM PS/2上读/写文件

Cal*_*ams 5 pascal dos turbo-pascal

问题:我最近收购了1989年的IBM PS2,我正在尝试通过软盘将大型文件从我新的基于UNIX的机器移到这个IBM.我有一个bash脚本将我的文件分成~2MB块,现在我正在尝试编写一个pascal程序,以便在它们被传输后重建这些文件.

我无法在此计算机上找到正确的读/写文件方法.我已经尝试了各种pascal教程站点,但它们都适用于较新版本(我在Pascal文件处理中遵循的站点).我能够创建一个空文件(如下所述),但我无法写入它.有谁知道这种类型的计算机正确的pascal读写方法?

我知道这是一个晦涩难懂的问题,所以,如果您有任何帮助,请提前感谢您!

细节:

正确创建文件的当前测试代码如下:

program testingFiles;
uses Crt, Win;

const FILE_NAME = 'testFile.txt';
var outFile : File;

begin
writeln('creating file ...');
Assign(outFile, FILE_NAME);
rewrite(outFile);    

end.
Run Code Online (Sandbox Code Playgroud)

这是一些测试代码不工作,方法的append()close()无法找到:

program testingFiles;
uses Crt, Win;

const FILE_NAME = 'testFile.txt';
var outFile : File;

begin
writeln('creating file ...');
Assign(outFile, FILE_NAME);

append(outFile);
writeln('this should be in the file');
close(outFile);

end.
Run Code Online (Sandbox Code Playgroud)

这是另一种也不起作用的writeln()方法,该方法只能打印到终端.但否则这会编译.

program testingFiles;
uses Crt, Win;

const FILE_NAME = 'testFile.txt';
var outFile : File;

begin
writeln('creating file ...');
Assign(outFile, FILE_NAME);

rewrite(outFile);
writeln('this should be in the file');
close(outFile);

end.
Run Code Online (Sandbox Code Playgroud)

系统:如前所述,这是1989年的IBM PS2.

  • 它安装了Windows 3.0,还可以运行DOS和MS-DOS终端.
  • 它具有Microsoft SMARTDrive磁盘缓存版本3.06
  • 它安装了Turbo Pascal 5.5,我turbo用作命令行pascal编辑器.(自述文件最后更新于1989年)
  • 它安装了Turbo调试器1.5.

我再次知道这是一个晦涩难懂的问题,所以请提前感谢您提供给我的任何帮助!

Ken*_*ite 1

这里有一些旧的 Delphi 代码,应该至少接近语法兼容,它将为您提供复制文件的要点(在发生错误时进行有限的错误检查和资源处理 - 我将把它作为练习留给您)。它可以复制二进制和文本内容。

program Project2;

uses
  SysUtils;

var
  NumRead, NumWritten: LongInt;
  pBuff : PChar;
  SrcFile, DstFile: File;
const
  BuffSize = 2048;  // 2K buffer. Remember not much RAM available    

  InFileName = 'somefile.txt';
  OutFileName = 'newfile.txt';
begin
  NumRead := 0;
  NumWritten := 0;

  AssignFile(SrcFile, InFileName);
  AssignFile(DstFile, OutFileName);

  // Allocate memory for the buffer
  GetMem(pBuff, BuffSize);

  FileMode := 0;            // Make input read-only
  Reset( SrcFile, 1 );

  FileMode := 2;            // Output file read/write
  Rewrite( DstFile, 1 );

  repeat
    // Read a buffer full from input
    BlockRead(SrcFile, pBuff^, BuffSize, NumRead);

    // Write it to output
    BlockWrite(DstFile, pBuff^, NumRead, NumWritten);
  until (NumRead = 0) or (NumWritten <> NumRead);

  // Cleanup stuff. Should be protected in a try..finally,
  // of course.
  CloseFile(SrcFile);
  CloseFile(DstFile);
  FreeMem(pBuff);
end.
Run Code Online (Sandbox Code Playgroud)

上面的代码目前在Delphi 2007(我安装的最旧版本)下编译。(请参阅下面的注释。)

附带说明一下,这是我所拥有的一些代码的存档版本,这些代码既针对 16 位 Delphi 1 进行了编译,又在 90 年代中后期扩展到了 32 位 Delphi 2 下进行编译。它仍然挂在我的源代码存储库中的旧标记分支中。我想我需要做一些修剪。:-) 我清理了它以删除一些其他功能,并在发布之前删除了很多{$IFDEF WIN32} ... {$ELSE} ... {$ENDIF}内容。)