问题:我最近收购了1989年的IBM PS2,我正在尝试通过软盘将大型文件从我新的基于UNIX的机器移到这个IBM。我有一个bash脚本,将我的文件分成~2MB块,现在我正在尝试编写一个pascal程序,以便在它们被传输后重建这些文件。
我无法在此计算机上找到正确的读/写文件方法。我已经尝试了各种pascal教程网站,但它们都适用于较新版本(我跟随File Handling In 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.
这是一些不起作用的测试代码,无法找到方法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.
这是一个也不起作用的替代方法,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.
系统:如前所述,这是一个1989 IBM PS2。
turbo
作为命令行pascal编辑器。 (自述文件最后更新于1989年)同样,我知道这是一个晦涩难懂的问题,所以,如果您有任何帮助,请提前感谢您!
答案 0 :(得分:1)
我的帕斯卡记忆非常生疏...但正如其他人所指出的,这是你应该考虑的事情:
program testingFiles;
uses Crt, System;
//No need of importin Win Win is for Windows enviorment, however I'm not sure if you need to use System, Sysutils or was there a Dos class???
const FILE_NAME = 'testFile.txt';
var outFile,inFile : File;
begin
writeln('creating file ...');
Assign(outFile, FILE_NAME);
rewrite(outFile);
//Now Open the first chunk of the file you want to concatenate
AssignFile(inFile, "fisrt_chunk.dat");
reset(inFile);
while not eof(inFile) do
begin
readln(inFile, s);
writeln(outFile,s);
end;
close(inFile);
end.
我没有安装Turbo / Borland Pascal,所以我自己无法编译,也没有承诺它会起作用更像是一个想法:
答案 1 :(得分:0)
这里有一些旧的Delphi代码,它们至少应该与语法兼容,它将为您提供复制文件的要点(错误检查和资源处理有限,以防出现错误 - 我' ll把它作为锻炼给你)。它可以复制二进制文本和文本内容。
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.
上面的代码目前在Delphi 2007下编译(我安装的最旧的版本)。 (见下面的注释。)
作为旁注,这是来自我为16位Delphi 1编译的一些代码的存档版本,并且在90年代中后期被扩展为在32位Delphi 2下编译。它仍然悬挂在旧标记分支的源代码库中。我想我需要做一些修剪。 :-)我清理它以删除一些其他功能,并在发布之前删除了很多{$IFDEF WIN32} ... {$ELSE} ... {$ENDIF}
内容。)