Delphi 10.3读取文本文件至数组时出现“file not found”错误求助
嘿,我明白你现在复习Delphi数组时遇到的文件读取问题有多头疼——尤其是马上要测试了,这种小bug真的很影响节奏。咱们一步步来解决这个“file not found”的问题:
排查与解决步骤
1. 先确认Delphi的实际工作目录
Delphi默认的运行工作目录不一定是你代码所在的文件夹,比如可能默认指向Documents\Embarcadero\Studio\Projects这类系统路径。你可以在代码开头加一行来验证当前路径:
ShowMessage(GetCurrentDir);
运行后弹出的路径就是程序实际找文件的位置。你可以:
- 把文本文件移到这个路径下
- 或者在代码里直接写绝对路径指定文件位置,比如:
var MyFile: TextFile; begin AssignFile(MyFile, 'C:\Users\你的用户名\Desktop\你的项目文件夹\data.txt'); Reset(MyFile); // 后续读取逻辑 CloseFile(MyFile); end;
2. 检查文件名的“隐形陷阱”
Windows默认会隐藏已知文件的扩展名,比如你看到的data.txt其实可能是data.txt.txt。可以在文件夹选项里开启「显示文件扩展名」,然后仔细核对代码里的文件名和实际文件名是否完全一致(包括大小写,虽然Windows不区分,但严格对应更稳妥)。
3. 确保文件真的在项目目录里
右键你的Delphi项目,选择「Open in Explorer」打开项目文件夹,确认文本文件确实在这个文件夹内,而不是放在了上级目录或者其他位置。
4. 用项目管理自动同步文件(推荐)
如果不想每次都手动挪文件,可以把文本文件加入项目:
- 右键项目 → Add → Existing Item,选中你的文本文件
- 在项目管理器里右键这个文件,选择「Properties」
- 把「Build Action」设为「Copy to Output Directory」(选「Copy always」或「Copy if newer」都可以)
这样编译时文件会自动复制到程序运行的输出目录,用相对路径就能直接找到。
读取文件到数组的示例代码
给你一个完整的参考示例,你可以对照自己的代码调整:
program ReadFileToArray; {$APPTYPE CONSOLE} {$R *.res} uses System.SysUtils; var MyFile: TextFile; Line: string; StringArray: array of string; I: Integer; begin try // 替换成你的文件路径,或用上面的方法确保文件可被找到 AssignFile(MyFile, 'test.txt'); Reset(MyFile); // 先统计行数,动态设置数组大小 I := 0; while not Eof(MyFile) do begin ReadLn(MyFile, Line); Inc(I); end; SetLength(StringArray, I); // 回到文件开头,读取内容到数组 Reset(MyFile); for I := 0 to High(StringArray) do begin ReadLn(MyFile, StringArray[I]); Writeln(StringArray[I]); // 输出验证读取结果 end; CloseFile(MyFile); ReadLn; // 暂停窗口查看结果 except on E: Exception do Writeln('错误信息: ', E.Message); end; end.
内容的提问来源于stack exchange,提问作者PrimeBeat
相关产品推荐
相关产品推荐

