Это для Призмы Дельфи.
Скажем, у меня есть следующий тип набора enum, который я хотел бы сохранить в двоичном файле.
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);
Вот тип набора:
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;
Если бы вы могли ответить с примером кода или фактическим кодом, я был бы признателен.
Если вы не заметили, я назначил награду за этот вопрос. Мне действительно нужен рабочий ответ. Спасибо,
Спасибо