![]() |
Problem bei ReadBuffer ;(
Hi, ich habe jetzt seit ein paar Tagen .net und arbeite jetzt ein wenig damit.
So wollte ich eine alte Unit von mir in einer VLC Anwendung verwenden, hat auch vieles geklappt, aber bei dieser Procedure bekomme ich einen Fehler:
Delphi-Quellcode:
procedure BIB_FileReplaceString(FileName, searchstring, replacestring: string);
var fs: TFileStream; S: string; begin // Erstellen der Variablen für die Datei fs := TFileStream.Create(FileName, fmOpenread or fmShareDenyNone); try SetLength(S, fs.Size); fs.ReadBuffer(S[1], fs.Size); finally fs.Free; end; // Ersetzen des Textes S := StringReplace(S, SearchString, replaceString, [rfIgnoreCase]); fs := TFileStream.Create(FileName, fmCreate); try fs.WriteBuffer(S[1], Length(S)); finally fs.Free; end; end; Durch ausschneiden compilieren, ausschneiden kompilieren habe ich den Fehler gefunden, es liegt an dieser Zeile:
Delphi-Quellcode:
fs.ReadBuffer(S[1], fs.Size);
Die Fehlermeldung lautet: [Error] BIB_Dateibearbeitung.pas(253): String element cannot be passed to var parameter Ich hoffe jemand kann mir helfen mfg Curse4Life |
Re: Problem bei ReadBuffer ;(
Delphi-Quellcode:
Ich würde das so gestalten. Denn hinter einen Long-String steht eigentlich ein PChar.
procedure BIB_FileReplaceString(FileName, searchstring, replacestring: string);
var fs: TFileStream; S: string; begin // Erstellen der Variablen für die Datei fs := TFileStream.Create(FileName, fmOpenread or fmShareDenyNone); try SetLength(S, fs.Size); fs.Read(PChar(S)^, fs.Size); finally fs.Free; end; // Ersetzen des Textes S := StringReplace(S, SearchString, replaceString, [rfIgnoreCase]); fs := TFileStream.Create(FileName, fmCreate); try fs.Write(PChar(S)^, Length(S)); finally fs.Free; end; end; |
Re: Problem bei ReadBuffer ;(
Deine Variante funktioniert leider nicht! ;(
|
Re: Problem bei ReadBuffer ;(
Was funktioniert wie nicht, etwas genauer bitte?
|
Re: Problem bei ReadBuffer ;(
Diese Fehlermeldung bei der Zeile mit dem Read
[Error] BIB_Dateibearbeitung.pas(240): Invalid typecast mfg |
Re: Problem bei ReadBuffer ;(
Kann ich leider mit Delphi7 Prof nicht nachvollziehen.
Delphi-Quellcode:
Result : String;
aStream.Read(PChar(Result)^, dwLen);
dwLen : Cardinal; Funktioniert einwandfrei. :gruebel: Welche Delphiversion? |
Re: Problem bei ReadBuffer ;(
8, .net eben :)
mfg |
Re: Problem bei ReadBuffer ;(
Da geht es natürlich nicht!
-> Delphiversion angegeben!!! Mit D8 kenne ich mich nicht aus! Das einzige was ich mache ich C#. Schau mal nach der Convert-Klasse. Binärstrom. |
Re: Problem bei ReadBuffer ;(
Zitat:
...:cat:... |
Re: Problem bei ReadBuffer ;(
Zitat:
Ich kenne mich nur mit read und write aus, jedoch nicht mit readBuffer und writeBuffer. DANNYBOY |
Re: Problem bei ReadBuffer ;(
Also für das Lesen geht es unter .NET wie folgend:
Delphi-Quellcode:
Schreiben sollte analog dazu sein ;)
procedure TForm1.Button1Click(Sender: TObject);
type TByteArray = array of Byte; var FileStream: TFileStream; ByteArray: TByteArray; begin FileStream := TFileStream.Create('C:\Temp\dp.txt', fmOpenRead or fmShareDenyNone); try SetLength(ByteArray, FileStream.Size); FileStream.ReadBuffer(ByteArray, FileStream.Size); Caption := System.Convert.ToString(ByteArray); finally FileStream.Free; end; end; ...:cat:... |
Re: Problem bei ReadBuffer ;(
|
Re: Problem bei ReadBuffer ;(
Zitat:
@Curse4Life: Wir haben in der DP nichts gegen sogenannte Cross-Postings, aber wir würden schon gerne die Lösung erfahren (oder einen Link dahin), wenn Du diese woanders bekommst. ...:cat:... |
Re: Problem bei ReadBuffer ;(
Es ist leider nicht möglich, alte D7 Sourcen in D8 zu verwenden, da einige Methoden von Klassen anders auch mit anderen Parametern implementiert wurden. Soviel zu dem, dass man die Schnittstellen nicht verändern sollte.
Gerade diese FileStream Methode hat es leider ziemlich verändert, schau dir da einmal die genaue Deklaration an. Ich denke das wird aufschlussreich sein. |
Re: Problem bei ReadBuffer ;(
Tut mir leid, dass nächste mal werde ich die Lösung dann hier sofort posten!
mfg |
Re: Problem bei ReadBuffer ;(
Warum macht ihr euch das so schwer?
Eine Datei in einen String zu lesen ist unter .Net ein Einzeiler (solange man diese komischen VCL.Net -klassen nicht verwendet :? ). Die erste Möglichkeit kommt IMHO aus dem Framework 2.0, die zweite sollte aber sogar mit Delphi8 funktionieren (die 2. ist eigentlich ein Zweizeiler ;) ):
Delphi-Quellcode:
strTextFile := System.IO.File.OpenText(strPath2TextFile).ReadToEnd();
Delphi-Quellcode:
In beiden Fällen kann man einfach durch StreamReader.ReadToEnd den gesamten Stream als ein String bekommen.
strTextFile := System.IO.StreamReader.Create(strPath2TextFile, true).ReadToEnd();
|
Alle Zeitangaben in WEZ +1. Es ist jetzt 12:49 Uhr. |
Powered by vBulletin® Copyright ©2000 - 2025, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024-2025 by Thomas Breitkreuz