이것은 Delphi Prism을위한 것입니다.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를 사용하여 enum SET TYPE (Fruit)을 이진 파일로 읽고 쓰는 방법은 무엇입니까? 다른 Stackoverflow 질문에 내 질문에 대한 대답을 발견했지만 생각하지 않았다.
필자는 주로 요소를 반복해야한다고 생각하지만 간단한 방법이 있는지 알아야했습니다.
첫 번째 답변을 마친 후 빠른 결론을 내 렸습니다. 이는 내 실수였습니다. 내 프로그램에서 다른 문제와 오류가 발생하면 컴파일러는 처음에 제안한 변경 사항과 CK의 유일한 대답으로 오류를 제기했습니다. 나는 글을 쓸 수 있지만 읽을 수는 없습니다. 컴파일러는 계속 말합니다 - "형식 불일치, System.SByte를 Groups.TFeature 집합에 할당 할 수 없습니다"
맨 위에있는 코드는 단지 예일뿐입니다.
다음이 열거 형입니다 : 여기
TFeature = (tfUnit,tfSignal,tfAlarm,tfControl,tfMaker,tfViewer,tfTrend,
tfComm,tfSystem,tfScan,tfShutdown,tfPID,tfMagiKal);
유형의 집합입니다 : 여기
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;
: 여기
TFeatures = set of TFeature;
는 클래스입니다 다음은 실제 코드는 내가 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;
예제 코드 또는 실제 코드로 대답 할 수 있다면 감사하겠습니다.
예고하지 못했을 경우, 나는이 질문에 대한 현상금을 시작했습니다. 나는 실제로 작동하는 대답이 필요하다. 감사,
감사합니다,
@Ck, 답변 해 주셔서 감사합니다. 나는 글을 쓸 수는 있지만 읽을 수는 없습니다. 바이트에서 데이터 유형 (Fruits)을 설정하지 못한다고합니다. – ThN
@ CK, 나는 그것이 일하고 있다고 생각했다. 그러나 나는 결론에 너무 빨리 뛰어 올랐다. 다른 오류를 통해 작업 한 후 마침내 컴파일 할 프로그램이 생겼습니다. 이제 파일에서 다시 읽으려고 할 때 오류가 발생합니다.ToArray를 사용하여 파일에 쓸 수 있지만 readSbyte 메서드를 사용할 때 실패합니다. 처음 컴파일했지만 다른 오류가있었습니다. 그래서, 지금까지이 오류가 발생하지 않았습니다. 그래서 내가 너의 대답을 아직 받아들이지 않았다. – ThN
샘플이 추가되었습니다. –