Delphi-PRAXiS
Seite 2 von 3     12 3      

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)

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.


Alle Zeitangaben in WEZ +1. Es ist jetzt 23:00 Uhr.
Seite 2 von 3     12 3      

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