Delphi-PRAXiS

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Sonstige Fragen zu Delphi (https://www.delphipraxis.net/19-sonstige-fragen-zu-delphi/)
-   -   Delphi TFileStream.Create: nicht unter Win2k? (https://www.delphipraxis.net/36696-tfilestream-create-nicht-unter-win2k.html)

Gina 23. Dez 2004 17:48


TFileStream.Create: nicht unter Win2k?
 
Erstmal ein herzliches Hallo an alle...

Ich hab da mal eine kleine Frage. In meinem Programm beutze ich TFileStream.Create(Datei,fmOpenRead), um eine Datei zu öffnen und einzulesen. Bei mir funktioniert das wunderbar. Aber bei meinem "Tester" komischerweise nicht. Er hat Win2k und ich WinXP. Hat das irgendwas damit zu tun?

Die Dateien lassen sich bei ihm nicht öffnen. Egal welcher Art. Selbst eine einfache Textdatei nicht. Sie werden auch nicht von einem anderen Programm verwendet. Das haben wir bereits geprüft. Er hat mir die Dateien mal geschickt und bei mir geht alles einwandfrei.

Hat irgendjemand eine Idee dazu?

Vielen Dank, Gina.

PS: Ich benutze Delphi 6 Prof.

Luckie 23. Dez 2004 17:50

Re: TFileStream.Create: nicht unter Win2k?
 
Hat er Lese- / Schreibrechte auf die Datei? Was kommt als Fehlermeldung?

Dax 23. Dez 2004 17:51

Re: TFileStream.Create: nicht unter Win2k?
 
Vielleicht ist die Pfadangabe falsch, oder die Datei existiert zu diesem Zeitpunkt noch gar nicht.. Wo liegen diese Dateien denn? Wenn sie im Programmverzeichnis liegen, reicht der Dateiname als Angabe.

Gina 23. Dez 2004 18:02

Re: TFileStream.Create: nicht unter Win2k?
 
Hallo,

Lese-/Schreibrechte sind vorhanden. Die Pfade stimmen auch, da er die Dateien über ShellTreeView/ShellListView auswählt. Er hat die Dateien auch schon in das Installationsverzeichnis des Programms kopiert, was aber auch nix brachte. Und wie gesagt, bei mir funktioniert es ja ohne Probleme.

Als Fehlermeldung kommt meine, die ich per try/except eingebaut habe, aber ich kann das natürlich mal rausnehmen, um die "echte" zu sehen...

Irgendwelche Besonderheiten für Win2k gibt es also nicht? Vielleicht müssen da bestimmte uses rein, oder dürfen nicht drin sein?

Vielen Dank erstmal, Gina.

Luckie 23. Dez 2004 18:07

Re: TFileStream.Create: nicht unter Win2k?
 
Zitat:

Zitat von Gina
Als Fehlermeldung kommt meine, die ich per try/except eingebaut habe, aber ich kann das natürlich mal rausnehmen, um die "echte" zu sehen...

Und was ist deine? Besser ist es immer die Fehlermeldung vom System anzeigen zu lassen:
Delphi-Quellcode:
ShowMessage(SysErrorMessage(GetLastError));

Gina 23. Dez 2004 18:24

Re: TFileStream.Create: nicht unter Win2k?
 
Also ich muss sagen, dass ich wirklich sehr beeindruckt bin, wie schnell man hier Antworten bekommt... :thumb: Echt supi...

Meine Fehlermeldung heißt: "Kann Datei nicht öffnen" und die kommt, wenn er fmOpenRead nicht ausführen kann. Zusätzlich wir die Datei mit vollständigem Pfad ausgegeben, so dass ich diesen auch kontrollieren kann.

Ich hab ihm jetzt eine Version mit
Delphi-Quellcode:
ShowMessage(SysErrorMessage(GetLastError));
geschickt.

Ich melde mich gleich, wenn das Ergebnis kommt.

Achso: Bei ShellCrtls wird mir angezeigt, dass dies plattformspezifisch sei. Konnte allerdings in der DH nix finden, für welche Plattformen die nutzbar ist? Wo finde ich so etwas?

Tausend Dank schonmal, Gina.

PS: Wieso ist eigentlich mein Nick immer unterstrichen? :oops:

Luckie 23. Dez 2004 18:26

Re: TFileStream.Create: nicht unter Win2k?
 
Plattform spezifisch bedeutet, dass die enthaltenen Routinen nur unter Win32 oder Linux zur Verfügung stehen bzw. funktionieren.

Dax 23. Dez 2004 18:54

Re: TFileStream.Create: nicht unter Win2k?
 
[ot]GINA ist nicht nur ein Nick, sondern auch noch ein (wichtiger) Begriff in Computerkreisen, deshalb wirds unterstrichen. Fahr mal mit der Maus drüber, dann bekommst du den Begriff erklärt ;)[/ot]

Gina 23. Dez 2004 19:52

Re: TFileStream.Create: nicht unter Win2k?
 
Ich glaubs ja nicht... :wall:
Zitat:

Das System kann den angegebenen Pfad nicht finden...
Komischerweise wird er ja korrekt angezeigt. Dann lag ich ja völlig auf dem falschen Weg. Ohne Euch würde ich wahrscheinlich sonst wo suchen... :roll:

Also muss ich bei den Pfaden suchen. Bloß was ist daran falsch? So etwas wie "C:\Daten\test.txt" ist doch nix besonderes. Keine Umlaute nix. Kein Backslash zu viel... *hilfe*

Was kann ich noch tun, um den Fehler zu finden? :cry:

Vielen lieben Dank Euch, Gina.

@ Dax: hmm, irgendwie bekomme ich, seit ich registriert bin, gar nix mehr angezeigt, wenn ich mit der Maus drüber fahre. Ist das irgendwo eine Einstellung?

EDIT: Ok, jetzt gehts, lag wohl an einem der Programme, die ich offen hatte. Wußte gar nicht, dass ich eine eigene dll habe :oops:

Dax 23. Dez 2004 20:00

Re: TFileStream.Create: nicht unter Win2k?
 
Dazu gibt es keine Einstellung im Forum, das muss an deinem Browser liegen... Welchen benutzt du denn? Bei Firefox funktionierts, beim IE auch.

Luckie 23. Dez 2004 20:10

Re: TFileStream.Create: nicht unter Win2k?
 
Sind Leerzeichen im Pfad, dann musst du ihn in Hochkomata einschließen.

Muetze1 23. Dez 2004 20:10

Re: TFileStream.Create: nicht unter Win2k?
 
Moin!

Füge ansonsten mal dem fmOpenRead noch ein "Or fmShareDenyNone" hinzu.

MfG
Muetze1

Gina 23. Dez 2004 21:24

Re: TFileStream.Create: nicht unter Win2k?
 
@ Dax: Ich benutze den IE. Ist aber nicht so wild. Sobald ich nix anderes offen habe, bekomme ich die Sachen auch angezeigt... Liegt wohl an SP2 oder woran auch immer...

@ Luckie: Hab versucht, Hochkommata hinzuzufügen, aber irgendwie stelle ich mich dabei wohl zu blond an :oops: Jetzt sagt er mir, dass die Syntax für Dateinamen oder Pfade nicht stimmen würde. Wie genau muss ich die reinsetzen please?

@ Muetze1: Ok, das hab ich auch noch hinzu gefügt. Dazu hab ich gleich mal ne Frage: Laut Delphi-Hilfe ist dieser Parameter optional, zusätzlich und auf Windowssystemen würde er ignoriert werden. Andererseits sehe ich öfter, dass er durch OR verknüpft angegeben wird. Kannst du mir das mal please erklären?

Das Ergebnis der abgeänderten Version werd ich bestimmt erst morgen bekommen.
Also vielen lieben Dank allen erstmal, Gina.

The-X 23. Dez 2004 21:29

Re: TFileStream.Create: nicht unter Win2k?
 
Zitat:

Zitat von Luckie
Sind Leerzeichen im Pfad, dann musst du ihn in Hochkomata einschließen.

meinst du etwa so :shock: ?

Delphi-Quellcode:
Var MyFS:TFileStream;

Procedure DoFileOp(Datei:String);
begin
Try
  myFS:=TFileStream.Create(Datei,fmopenRead);
  try
    // mach was mit dem Stream...
  finally
    myFS.Free;
  end;
Except
  ShowMessage(SysErrorMessage(GetLastError));
end;
end;

DoFileOp('"C:\Dokumente und Einstellungen\The-X\Daten.txt"');
sie sagt doch er bekommt den Dateinamen von einem ShellTreeView etc
und nicht über ParamStr(1) z.b. :roll:
[edit] ein ' vergessen :roll: [/edit] :mrgreen:

Luckie 23. Dez 2004 21:55

Re: TFileStream.Create: nicht unter Win2k?
 
Zitat:

Zitat von The-X
sie sagt doch er bekommt den Dateinamen von einem ShellTreeView etc
und nicht über ParamStr(1)

Ja und? Kein Grund dass man trotzdem eventuell Hochkomata braucht.

The-X 23. Dez 2004 22:03

Re: TFileStream.Create: nicht unter Win2k?
 
Liste der Anhänge anzeigen (Anzahl: 1)
Ähm so weit ich weiss werden die " nur bei der Parameterübergabe benutzt
oder machst du bei jeder Procedure die eine Datei öffnet

foo('"'+Dateiname+'"'); ?

kleines Beispiel:
Delphi-Quellcode:
Memo1.Lines.LoadFromFile('"C:\BOOT.INI"');
führt nämlich genau DAZU:
Zitat:

---------------------------
Debugger Exception Notification
---------------------------
Project Project1.exe raised exception class EFOpenError with message 'Cannot open file "C:\Programme\Borland\Delphi7\Projects\"C:\BOOT.IN I"". Die Syntax für den Dateinamen, Verzeichnisnamen oder die Datenträgerbezeichnung ist falsch'. Process stopped. Use Step or Run to continue.
---------------------------
OK Help
---------------------------
Desweiteren darf das Zeichen " garnicht in Dateinamen vorkommen, wie du leicht feststellen wirst wenn du eine Datei umbenennen willst z.b. Neuer-17"-TFT.txt (siehe Anhang)

Gina 23. Dez 2004 22:24

Re: TFileStream.Create: nicht unter Win2k?
 
Genau die Fehlermeldung bekomme ich auch :cry: Es ist echt zum Mäusemelken...

Aber unabhängig davon dürfte es ohne Hochkommata doch kein Problem sein, wenn keine Leerzeichen im Pfad vorkommen, oder?

Ich glaub ich geh erstmal ins Bettchen. Vielleicht träum ich ja was passendes... :wink:

Danke vielmals, Gina.

supermuckl 23. Dez 2004 22:26

Re: TFileStream.Create: nicht unter Win2k?
 
macht mal die gänsefüßchen da weg

Muetze1 23. Dez 2004 22:57

Re: TFileStream.Create: nicht unter Win2k?
 
Moin!

Zitat:

Zitat von Gina
@ Muetze1: Ok, das hab ich auch noch hinzu gefügt. Dazu hab ich gleich mal ne Frage: Laut Delphi-Hilfe ist dieser Parameter optional, zusätzlich und auf Windowssystemen würde er ignoriert werden. Andererseits sehe ich öfter, dass er durch OR verknüpft angegeben wird. Kannst du mir das mal please erklären?

Das Ergebnis der abgeänderten Version werd ich bestimmt erst morgen bekommen.
Also vielen lieben Dank allen erstmal, Gina.

Der Parameter ist optional - du hast ihn ja z.B. weggelassen und ich habe diese Option genutzt und dir vorgeschlagen dieses auch zu nutzen... *g*. Grundsätzlich wird er eigentlich gerade auf Windowssystemen genutzt anstatt ignoriert. Damit kannst du die Zugriffsteuerung festlegen wie er sich verhalten soll, wenn schon ein anderes Programm auf die Datei zugreift. Mit den anderen Share Optionen (fmShareDenyWrite) kannst du z.B. zusätzlich festlegen (wenn du eine Datei öffnest), dass Schreibzugriffe von anderen Prozessen verboten werden (so lange du die Datei offen hast). Durch solche Angaben kannst du dann sicher sein, dass die Datei nicht verändert wird. Die anderen Processe bekommen bei dem Versuch diese Datei zum Schreiben zu öffnen einen Fehler. Ich habe vermutet das die ShellListView diese Datei offen hält, weil es das Icon ausgelesen hat bzw. ausliest. Daher dieser Versuch mit der Angabe, dass du keine anderen Zugriffe auf die Datei verwehrst.

Und das mit OR ist eine einfach logische Verknüpfung, da diese Konstanten meist Bits wiederspiegeln. Näheres dazu findest du im Tafelwerk, in der Online Hilfe oder im Internet (logische Operationen). Auch hier im Board sollte sich dazu was finden lassen.

MfG
Muetze1

Gina 24. Dez 2004 13:48

Re: TFileStream.Create: nicht unter Win2k?
 
Hallo,

achso, dann habe ich das in der Delphi-Hilfe völlig falsch verstanden. Ich dachte der Parameter Rights wäre fmShareDenyNone etc.

Ich hätte diesen Abschnitte wohl noch ein paar Mal mehr lesen sollen:
Zitat:

Der Parameter Mode steuert, auf welche Art die Datei geöffnet wird. Der Parameter besteht aus zwei Elementen: Eines beschreibt das Öffnen, und eines legt den Modus für den gemeinsamen Zugriff fest. Beide Elemente werden durch ein logisches ODER verknüpft.
Vielen Dank für die Erleuchtung... :wink:

Das logische ODER an sich ist mir bekannt. Wie gesagt, ich dachte das wäre der zweite Parameter, den man ja durch Komma getrennt angibt und hab mich deshalb über das Or gewundert.

Zum Öffnen-Problem:

Ich habe heute ein neues Projekt gemacht und nach und nach die einzelnen Teile eingebaut. Und was soll ich sagen? Bisher fehlerfrei bei meinem Tester. Dann liegt das Problem also nicht an dem fmOpenRead, sondern irgendwo völlig versteckt... :gruebel:

Damit wird die Fehlersuche wohl noch etwas dauern.

Vielen lieben Dank für Eure Hilfe. Ich hab vieles dabei gelernt... :wink:

Ich halte Euch auf dem Laufenden, nun feiert aber erstmal schön,
bis bald, Gina.

Gina 25. Dez 2004 15:48

Re: TFileStream.Create: nicht unter Win2k?
 
Da bin ich wieder,

ich hab den Fehler gefunden. Der Pfad wurde tatsächlich falsch übergeben, allerdings nicht beim einlesen der Datei, sondern beim speichern... *peinlich* :oops: Manchmal sieht man echt den Wald vor lauter Bäumen nicht...

Ich danke Euch ganz dolle für die Hilfe, hab ja schließlich einiges gelernt dabei.

Liebe Grüße und weiterhin frohes Feiern, Gina.


Alle Zeitangaben in WEZ +1. Es ist jetzt 18:33 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