Announcement

Collapse
No announcement yet.

TMemoryStream und Kylix

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

  • TMemoryStream und Kylix

    Hallo, <br>
    Folgende Konstruktion klappt bei einer CGI
    (WebBroker)-Anwendung ohne Probleme in Windows (Delphi), aber
    unter Kylix (3Prof) scheitert sie beim <i>LoadFromFile</i>:
    <PRE>
    if Request.QueryFields.Values['file'] > ''
    then begin
    stream := TMemoryStream.Create;
    stream.LoadFromFile(Request.QueryFields.Values['file']);
    try
    lst.Add(inhalt.setBlobData(vnr, stream));
    stream.Free;
    except
    // Exception-Behandlung
    end;
    end;

    </PRE>

    Ist das ein Bug oder mache ich was falsch (und unter Windows
    klappt sie nur "durch Zufall")?
    <br><br>
    Grüße von
    Thomas

  • #2
    Request.QueryFields.Values['file'] ergibt sicher ein gültigen Filenamen?<p>
    Grüße, Mari
    Schöne Grüße, Mario

    Comment


    • #3
      Hallo Mario,

      ja, der Dateinamen kommt gültig und mit allen notwendigen
      Pfadangaben. Wie gesagt: die gleiche Formulierung läuft unter
      Windows problemlos. <br>
      Ich vermute etwas in Richtung Berechtigungen. Da ist Linux ja
      vernünftigerweise strukturiert während ich in Windows an alles dran
      darf. Der Fehler tritt ja auch nur zur Laufzeit auf.
      <br>Grüße von Thoma

      Comment


      • #4
        Dann habe ich keine Ahnung... Du kannst aber mal schauen, ob Du beim Öffnen der Datei den Modus (ReadOnly) irgendwie setzen kannst. Vielleicht hilft das ja?<p>
        Schöne Grüße, Mario Noack<p>
        PS: Nur weil Du unter Windows normalerweise mit Admin-Rechten arbeitest, heißt das ja nicht, dass es nicht auch ganz anders geht ;
        Schöne Grüße, Mario

        Comment


        • #5
          Jaja - ich kenne das! Ich habe Kunden, bei denen der PC wie früher
          die Terminals funktioniert. Das ist dann das andere Extrem! <br>
          <br>
          Ich versuche mal, die Datei mit TFileStream zu lesen und dann an
          den Stream zu übergeben. Mal schauen, ob das hilft. In
          TMemoryStream läßt sich die Berechtigung nicht mitgeben.
          <br>
          Danke erstmal <br>
          Thoma

          Comment


          • #6
            Bei mir steht im Source:<p>
            <pre>procedure TMemoryStream.LoadFromFile(const FileName: string);
            var
            Stream: TStream;
            begin
            Stream := TFileStream.Create(FileName, fmOpenRead or fmShareDenyWrite);
            try
            LoadFromStream(Stream);
            finally
            Stream.Free;
            end;
            end;</pre><p>
            Also ist TFileStream wirklich ein sinnvoller Ansatz.<p>
            Schöne Grüße, Mario Noac
            Schöne Grüße, Mario

            Comment


            • #7
              Ich habe jetzt nicht nachgeschaut, aber so wie oben kann der Code
              nicht funzen.<br>
              Ich habe jetzt folgendes gemacht:
              <pre>
              var
              stream : TFileStream;
              r : TReader
              begin
              //
              stream := TFileStream.Create(Request.QueryFields.Values['file'],
              fmOpenRead);
              lst.Add('<br>Vor Reader.create');
              r:=TReader.Create(stream,4096);
              lst.Add('<br>nach Reader.create');
              try
              for i:=0 to stream.Size-1 do
              r.Read(ch,SizeOf(ch));
              lst.Add('<br>nach Read');
              finally
              r.Free;
              end;
              </pre>

              Das funzt aber auch nicht und schmiert beim FileStream.Create ab.
              Schreibe ich einen Dateinamen in den Sourcecode, dann funzt es.

              Merkwürden - muß also doch mit dem Dateinamen aus
              Request.QueryFields.Values['file'] zu tun haben ....


              Grüße von
              Thoma

              Comment


              • #8
                <b>Hab's!</b><br>
                Thema "Berechtigungssystem unter Linux": <br>Unter Linux ist der
                Apache ein <i>Benutzer</i>. Natürlich darf der Benutzer nicht
                einfach so auf Verzeichnisse zugreifen, sondern nur, wenn
                Leserechte auf das Verzeichnis gesetzt sind. Sind die gesetzt, dann
                funzt auch der Code wie ganz oben. <br>Das Lesen der Datei mit
                fest codierter Datei im Quellcode ging nur durch Zufall, da die Datei
                in meinem home-Verzeichnis liegt und ich dort allgemeine
                Leserechte für alle Benutzer des PCs gesetzt habe (meine
                Verzeichnisse dürfen sie ja ruhig sehen, aber nicht, was drin steht).
                <br>Vielen Dank für Deine Hilfe!

                Grüße von
                Thoma

                Comment

                Working...
                X