这是针对德尔福棱镜的。
说,我有以下枚举 SET 类型,我想将其保存到二进制文件中。
Fruit = (Apple, Banana, Mango, Cherry, Grapes, BlueBerry);
Fruits = set of Fruit;
FruitBasket:Fruits;
with Fruit do
FruitBasket := [Apple, Mango];
BinaryWriter thefile := new BinaryWriter(File.Create("test.dat"));
thefile.write(FruitBasket); //<<< raises Error - There is no overloaded method "Write" with these parameters
thefile.Close;
如何使用 BinaryWriter 将 enum SET Type(Fruit) 读写到二进制文件中?我以为我在另一个 Stackoverflow 问题中找到了我的问题的答案,但没有。
我想,我主要需要遍历它的元素,但我需要知道是否有更简单的方法来做到这一点。
更新:在第一个答案之后,我尝试并得出了一个快速的结论,这对我来说是一个巨大的错误。一旦我的程序中有其他问题和错误得到解决,我的编译器就会按照第一个建议和 CK 唯一回答的建议对我所做的更改提出错误。我只能写但不能读回来。编译器一直说 - “类型不匹配,无法将 System.SByte 分配给 Groups.TFeature 集”
顶部的代码只是一个示例。下面是实际代码:
这是枚举类型:
TFeature = (tfUnit,tfSignal,tfAlarm,tfControl,tfMaker,tfViewer,tfTrend,
tfComm,tfSystem,tfScan,tfShutdown,tfPID,tfMagiKal);
这是 SET OF 类型:
TFeatures = set of TFeature;
以下是课程:
TGroup = class
name:string;
rwFeatures:TFeatures;
roFeatures:TFeatures;
levels:TLevels;
private
public
constructor;
Method ReadAGrp(bgreader:BinaryReader);
Method ReadOld(bgreader:BinaryReader);
Method WriteAGrp(bgwriter:BinaryWriter);
end;
TGroupList = class(ArrayList)
private
public
Method ReadGroups(fname:string);
Method WriteGroups(fname:string);
Method AddGroup(group1:TGroup);
Method DeleteGroup(group1:TGroup);
Method FindGroup(gname:string):TGroup;
end;
这是我尝试使用 Binarywriter 将 SET OF 类型读取和写入二进制文件的方式:
procedure TGroup.ReadAGrp(bgreader:BinaryReader);
begin
name:=bgreader.ReadString;
rwFeatures := TFeature(bgreader.ReadSByte);
roFeatures := TFeature(bgreader.ReadSByte);
levels := TLevels(bgreader.readsbyte);
end;
procedure TGroup.ReadOld(bgreader:BinaryReader);
begin
name:=bgreader.ReadString;
rwfeatures := TFeature(bgreader.ReadSByte);
roFeatures := TFeature(bgreader.ReadSByte);
levels :=TLevels(bgreader.readsbyte);
end;
procedure TGroup.WriteAGrp(bgwriter:BinaryWriter);
begin
bgwriter.Write(name);
bgwriter.Write(rwFeatures.toarray);
bgwriter.Write(roFeatures.ToArray);
bgWriter.Write(levels.toarray);
end;
如果您可以用示例代码或实际代码回答,我将不胜感激。
万一你没有注意到,我开始为这个问题提供赏金。我真的需要一个有效的答案。谢谢,
谢谢,