Delphi - 将文件读取到StringList,然后删除并写回文件

标签 delphi file tstringlist

我目前正在 Delphi 2010 中开发一个程序来生成文件的哈希值。作为此过程的一部分,我可以选择创建用户预设,例如用户可以创建/保存/删除的哈希算法的预定义选择。我的创建和加载代码工作正常。它使用组合框并从文件“fhpre.ini”加载,该文件内是以以下格式存储的用户预设:-

预设名称
PresetCode(12 位字符串,0 表示不散列,1 表示执行)

应用程序加载时,它会将此文件中的数据加载到 ComboBox 和一个数组中,其中 ComboBox 的 ItemIndex 与数组中相应的正确的 0 和 1 字符串相匹配。

现在我需要实现一项功能,让用户从列表中删除预设。到目前为止我的代码如下,

procedure TForm1.Panel23Click(Sender : TObject);

var
fil : textfile;
contents : TStringList;
x,i : integer;
filline : ansistring;
filestream : TFileStream;

begin //Start Procedure

//Load data into StringList
contents := TStringList.Create;
fileStream := TFileStream.Create((GetAppData+'\RFA\fhpre.ini'), fmShareDenyNone);
Contents.LoadFromStream(fileStream);
fileStream.Destroy();

//Search for relevant Preset
i := 0;
if ComboBox4.Text <> Contents[i] then
begin
Repeat
i := i + 1;
Until ComboBox4.Text = Contents[i];
end;

contents.Delete(i); //Delete Relevant Preset Name
contents.Delete(i); //Delete Preset Digit String

//Write StringList back to file.
AssignFile(fil,(GetAppData+'\RFA\fhpre.ini'));
ReWrite(fil);
for i := 0 to Contents.Count -1 do
WriteLn(Contents[i]);
CloseFile(fil);
Contents.Free;
end;

但是,如果运行此命令,当它到达 WriteLn 部分时,我会收到 105 错误。我知道代码不是很好,例如没有对同名预设的检查,但这将会到来,我想让基本代码首先工作,然后可以调整并添加额外的检查等。

如有任何帮助,我们将不胜感激。

最佳答案

我希望您知道 TStringList 有 LoadFromFile 和 SaveToFile 方法?

如果由于某种原因无法使用这些方法,为什么使用流进行读取而使用 WriteLn 进行写入?

要使用 WriteLn 写入文件,必须将文件指定为第一个参数:

 WriteLn(fil, Contents[i]);

如果没有参数,它会尝试写入控制台(这可能在您的 Windows 应用程序中不可用)。错误 105 是“文件未打开以进行输出”。

关于Delphi - 将文件读取到StringList,然后删除并写回文件,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/4637372/

相关文章:

delphi - 为什么变量被声明为 TStrings 并被创建为 TStringList?

delphi - 将数百万条记录加载到字符串列表中可能会非常慢

delphi - 是否有一些已知的单元在使用 COM 库时自动初始化它?

delphi - TPanel 作为 MDI 应用程序中的启动屏幕

Python 行读取大小(以字节为单位)

c# - 通过 TCP 发送/接收文件

c++ - c++中使用构造函数读取文件

由于环境变量(HP笔记本电脑),delphi XE2无法在我的计算机上编译任何项目

xml - 需要支持D2009的xml组件

delphi - 如何根据特定规则对TStringList进行排序?