這是德爾福棱鏡。如何使用BinaryWriter將「SET OF」類型讀寫到文件中?
說,我有以下枚舉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枚舉SET類型(水果)到二進制文件?我以爲我在另一個Stackoverflow問題中找到了我的問題的答案,但沒有。
我認爲,我大多需要循環其元素,但我需要知道是否有更簡單的方法來完成它。
更新:在第一個答案後,我試了一下,得出了一個快速結論,這是我的一個巨大錯誤。一旦我的程序中出現了其他問題和錯誤,我的編譯器就會根據CK提出的第一個和唯一的答案提出的更改提出錯誤。我只能寫,但不能讀回來。編譯器總是說 - 「類型不匹配,無法將System.SByte分配給Groups.TFeature」
頂部的代碼僅僅是一個示例。下面是實際的代碼:
這裏是枚舉類型:
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;
這裏是我如何使用Binarywriter將SET類型讀入和寫入二進制文件:
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;
如果你可以用示例代碼或實際代碼回答,我將不勝感激。
如果你沒有注意到,我開始了這個問題的賞金。我真的需要一個可行的答案。謝謝,
謝謝,
@Ck,謝謝你的回答。我能寫,但不能讀回來。它說它不能從字節轉換爲設置數據類型(Fruits)。 – ThN
@ CK,我認爲它工作,但我很快就得出結論。在完成其他錯誤之後,我終於得到了我的程序進行編譯,現在當我從文件中讀取它時,它給了我錯誤。我能夠使用ToArray寫入文件,但是當我使用readSbyte方法時,它會失敗。雖然它最初編譯,但還有其他錯誤。所以,我想,直到現在,它還沒有解決這個錯誤。這就是爲什麼我還沒有接受你的答案。 – ThN
添加了一個樣本。 –