Announcement

Collapse
No announcement yet.

Datei öffnen - etwas problematisch

Collapse
X
  • Filter
  • Time
  • Show
Clear All
new posts

  • Datei öffnen - etwas problematisch

    Hallo Leute!

    Ich hätte da mal wieder ein kleines Problem, das ich einfach nicht beheben kann.<br>
    Ich habe ein kleines Programm geschrieben, das u.a. eine .log-Datei unter Windows2000 öffnen soll. Das sollte eigentlich kein Problem sein. Das dachte ich jedenfalls.<br>
    Somit ging ich wie folgt vor. Auf Tastendruck sollte die Datei in ein Memo geladen werden.<br>
    <b>
    Memo1.LoadFromFile('egal.log');<br>
    </b>
    Auch das ist kein Problem (eigentlich). Nur diese spezielle Datei lässt sich einfach nicht darstellen.
    Dabei handelt sich um folgende Datei: <b>X:\WINNT\Debug\UserMode\userenv.log</b><br>
    Nebenbei ist mir auch aufgefallen, das die Datei grösser ist, als sie eigentlich sein sollte. Eine neu angelegte Textdatei mit gleichem Inhalt ist um einiges kleiner. Das wird wahrscheinlich von Win2000 so gehandhabt.<br>
    Mit dem Notepad kann ich diese Datei aber ganz normal öffnen. Es geht halt nur mit Delphi nicht so recht.<br>
    Ich hatte auch schon probiert die Datei als untypisierte Datei zu öffnen, nach einem Beispiel von Andres Kosch, aber das sieht ja nicht sehr toll aus und ist keine wirkliche Lösung.<br>
    Ok, sollte mir jemand etwas helfen können, dann wäre ich sehr glücklich und dankbar.<br>

    mfg

    Torsten

  • #2
    Hallo,

    wenn die Datei grösser ist als erwartet und die Dateigrösse eventuell auch noch ein Vielfaches von 64 kByte beträgt, dann ist diese Datei offen und wird von einem anderen Prozess genutzt. Je nachdem, über welchen Weg der andere Prozess diese Datei geöffnet hat, muss man beim Aufruf der Win32-API-Funktion <b>OpenFile</b> für den <i>uStyle</i>-Parameter den dazupassenden Konstantenwert eintragen oder die Datei über <b>CreateFile</b> öffnen (Versuch-und-Irrtum-Methode).

    P.S: Die Delphi-Methode <b>LoadFromFile</b> verwendet den folgenden Aufruf:
    <pre>
    procedure TStrings.LoadFromFile(const FileName: string);
    var
    Stream: TStream;
    begin
    Stream := TFileStream.Create(FileName, fmOpenRead or fmShareDenyWrite);
    try
    LoadFromStream(Stream);
    finally
    Stream.Free;
    end;
    end;
    </pre>
    Da <b>fmShareDenyWrite</b> verwendet wird, darf kein anderer Prozess diese Datei gleichzeitig für Schreibzugriffe offen haben. Ich würde daher zuerst diese Funktion im eigenen Programm nachbauen und den letzten Parameter variieren (siehe Beschreibung in der Delphi-Hilfe).
    &#10

    Comment


    • #3
      Hallo Herr Kosch,

      besten Dank für den Tip. Leider brachte diese Variante keine Abhilfe.
      Nach mehrfacher Änderung der Konstanten für den Zugriffsmodus blieb das Problem dennoch bestehen.<br>
      Zu dem Problem muss ich aber noch etwas sagen.<br>
      Die Datei lässt sich doch öffnen. Es wird aber nur der erste Buchstabe aus dem ersten Wort der ersten Zeile dargestellt. Mehr nicht.<br>
      Naja, vielleicht kann mir ja damit jemand weiter helfen.<br>

      mfg

      Torste

      Comment


      • #4
        Hallo,

        in diesem Fall enthält die Datei UNICODE-Text

        Comment


        • #5
          Hallo,

          besten Dank für den Tip. Dann muss ich mich damit irgendwie auseinander setzen.

          mfg

          Torste

          Comment

          Working...
          X