Это для Delphi Prism.
Скажем, у меня есть следующий тип перечисления 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;
Как вы читаете и записываете enum SET Type (Fruit) в двоичный файл с помощью BinaryWriter? Я думал, что нашел ответ на свой вопрос в другом вопросе Stackoverflow, но не нашел.
Я думаю, мне в основном приходится перебирать его элементы, но мне нужно было знать, есть ли более простой способ сделать это.
ОБНОВЛЕНИЕ: После первого ответа я попробовал и быстро пришел к выводу, что было огромной ошибкой с моей стороны. Как только я разобрался с другими проблемами и ошибками в моей программе, мой компилятор выдал ошибки в отношении изменений, которые я внес, как было предложено первым и единственным ответом CK. Я могу только писать, но не читать обратно. Компилятор постоянно говорит: «Несоответствие типов, невозможно назначить System.SByte набору Groups.TFeature»
Код вверху — это просто пример. Ниже приведен фактический код:
Вот тип Enum:
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;
Вот как я пытаюсь прочитать и записать тип SET OF в двоичный файл с помощью Binarywriter:
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;
Если бы вы могли ответить с примером кода или фактическим кодом, я был бы признателен.
Если вы не заметили, я объявил награду за этот вопрос. Мне очень нужен рабочий ответ. Спасибо,
Спасибо,