Hallo Klarabella,
man lernt nie aus. Wenn man sich eine UDL Datei mit dem Notepad ansieht, scheint
es sich um eine ganz normale Textdatei zu handeln. Ist es aber nicht. Ein Blick mit
einem Hex-Editor zeigt, dass die ersten beiden Bytes FF und FE sind. Dann ist jedes
2. Byte ein #0. Diese Zeichen müssen erst herausgefiltert werden, bevor man den
Inhalt der Datei in ein TStringList-Objekt schiebt
Delphi-Quellcode:
procedure TFormUDL.Button1Click(Sender: TObject);
{Hier wird mit UDLFileStream eine UDL Datei in einen Stream gelesen.
Da in einer UDL Datei ab dem 3. Byte jedes zweite Zeichen #0 ist,
wird der UDLFileStream byteweise in UDLMemStream kopiert. Dabei wird
das Zeichen #0 unterdrückt. Anschließend. kann TStringList.LoadFromStream
aufgerufen werden}
var
Datei : string;
list : TStringList;
UDLFileStream : TFileStream;
UDLMemStream : TMemoryStream;
UDLByte : Byte;
str: string;
begin
Datei := ExtractFilePath(Application.Exename) + 'db1.udl';
list := TStringList.Create;
UDLMemStream:=TMemoryStream.Create;
UDLFileStream:=TFileStream.Create(Datei,fmOpenRead);
Try
// Die ersten beiden Bytes in der UDL Datei sind FF und FE
// Die können übersprungen werden.
UDLFileStream.Seek(2,soFromBeginning);
// Kopieren des Stream
While UDLFileStream.Position<UDLFileStream.Size do
begin
UDLFileStream.Read(UDLByte,SizeOf(Byte));
If UDLByte<>0 then // unterdrücken von #0
UDLMemStream.Write(UDLByte,SizeOf(Byte));
end;
UDLMemStream.Seek(0,soFromBeginning);
list.LoadFromStream(UDLMemStream);
str := list.Strings[0]; // enthält jetzt [oledb]
finally
UDLFileStream.Free;
UDLMemStream.Free;
list.Free;
end;
end;