Autor Beitrag
Conny Drexler
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starontopic star
Beiträge: 44


D6 prof. win xp
BeitragVerfasst: Mi 06.02.13 12:42 
Hallo zusammen.

Beim Aufruf der nachfolgenden Routine erhalten ich beim "rewrite" die Fehlermeldung E/A 183. Leider hat mir ein Blick in die Hilfe auch nichts gebracht.

ausblenden Delphi-Quelltext
1:
2:
3:
4:
5:
6:
7:
8:
9:
10:
11:
12:
13:
14:
15:
16:
17:
18:
19:
20:
21:
22:
23:
  if not(fileexists(konfig.stammverzeichnis + '\' + konfigurationsdateiname)) then  // Configurationsdatei nicht vorhanden
    Begin
      with konfig do
        Begin
           alle_zwischenzeiten := true;
           assignfile(konfigurationsdatei,konfig.stammverzeichnis + '\' + konfigurationsdateiname);
           konfig_init(konfig);
           getdir(laufwerk,konfig.stammverzeichnis);
           konfig.arbeitsverzeichnis := konfig.stammverzeichnis + '\' + datenverzeichnisname;
           rewrite(konfigurationsdatei);
           write(konfigurationsdatei,konfig);

           closefile(konfigurationsdatei);
        end;
    end
  else
    Begin
       assignfile(konfigurationsdatei,konfig.stammverzeichnis + '\' +  konfigurationsdateiname);
       reset(konfigurationsdatei);
       konfig_init(konfig);
       read(konfigurationsdatei,konfig);
       closefile(konfigurationsdatei);
    end;


Hat jemand eine Idee?????

Ich arbeite bis Delphi 6 und windows 7 home premium.
WasWeißDennIch
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starontopic star
Beiträge: 653
Erhaltene Danke: 160



BeitragVerfasst: Mi 06.02.13 12:55 
msdn.microsoft.com/e...82%28v=vs.85%29.aspx
Zitat:
ERROR_ALREADY_EXISTS
183 (0xB7)
Cannot create a file when that file already exists.

Nach einer kurzen Recherche scheint es sich um ein Problem zu handeln, das speziell unter Delphi 6 auftritt. Wie ist konfigurationsdatei deklariert, ist das eine Textdatei oder eine typisierte? Könntest Du mal versuchen, auf Stringlisten oder Streams umzustellen?
GuaAck
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starhalf ontopic star
Beiträge: 376
Erhaltene Danke: 32

Windows 8.1
Delphi 10.4 Comm. Edition
BeitragVerfasst: Do 07.02.13 00:04 
Hallo Conny,

habe den Code eben probiert (Delphi 7, Windows XP), er läuft bei mir. Deklaration: konfigurationsdatei: FILE OF t_konfig; T_konfig = RECORD....Die Verzeichnisnamen sind mit string[255] deklariert.

Auf jeden Fall ist mir aber eine Unschönheit aufgefallen: konfig.Stammverzeichnis wird mit doppelter Bedeutung verwendet: Zu Beginn ist es initalisiert und bestimmt, wohin die Konfigurationdatei geschrieben werden soll. Das GetDir setzt dann aber konfig.Stammverzeichnis neu und obwohl 'Arbeitsverzeichnis' exakt so aussieht wie 'assignfile' ist es (oder kann es) unterschiedlich sein. Ist das so beabsichtigt? Die Ursache für den E/A-Fehler ist das nicht, aber vielleicht hast Du ja Codeteile für eine kompakte Darstellung im Forum entfernt, und in dem Teil passiert ein Missverständnis.

Gruß GuaAck
Tranx
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starofftopic star
Beiträge: 648
Erhaltene Danke: 85

WIN 2000, WIN XP
D5 Prof
BeitragVerfasst: Do 07.02.13 11:41 
Wenn ich die Fehlermeldung sehe, kommt mir der Gedanke, dass vieleicht die Datei, die Du da gerade erzeugen willst, noch offen ist. Dann kann Windows die Datei nicht erzeugen, das hat wenig mit Delphi zu tun. Vielleicht prüfst Du mal, ob Du an einer anderen Stelle des Programmsw diese Datei noc hoffen hast, während Du die Datei hier in eem Codeteil erzeugen willst. Oder ob Du eine geöffnete Datei nicht wieder geschlossen hast, oder - was auch möglich ist, dass nämlich ein anderes Programm auf diese Datei zugreift.

_________________
Toleranz ist eine Grundvoraussetzung für das Leben.
GuaAck
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starhalf ontopic star
Beiträge: 376
Erhaltene Danke: 32

Windows 8.1
Delphi 10.4 Comm. Edition
BeitragVerfasst: Do 07.02.13 23:15 
Hallo Tranx,

kann eigentlich nicht sein, denn dann sollte E/A 32 (Shared File problem o.ä.) kommen. Es kommt aber 183 "Cannot create a file when that file already exists."
Genau das kann aber wegen der Abfrage "fileexists" in dem angegebenen Code nicht vorkommen. Ob E/A 32 kommt, das hängt auch von dem anderen Programm ab. Deshalb mein Verdacht, dass bei "fileexists" und "assignfile" wegen der von mir angeführten Ungenauigkeit unterschiedliche Dateien angesprochen werden.

Auch interessant: Lister oder Wordpad z.B. blockieren den Zugriff nicht, aber MS Word (Ich habe habe noch 2000) macht das.

Conny, uns würde die Lösung interessieren.

Gruß
GuaAck
drstar
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starhalf ontopic star
Beiträge: 79
Erhaltene Danke: 2

Windows 8.1/x64
Delphi 10.1
BeitragVerfasst: Di 19.03.13 19:12 
Ich bin mir jetzt nicht ganz sicher, aber findet FileExists tatsächlich auch alle Dateien, inkl. versteckten usw.? Ich meine mich dunkel zu erinnern, daß es in verschiedenen Delphi-Versionen verschieden war, möglicherweise liegt hier auch der "Fehler".
Datei existiert, FileExists übersieht sie lediglich, wäre jetzt meine Vermutung. Kann man evtl. vorher bei den Dateizugriffsbefehlen noch Variablen ändern, die von der Unit bereitgestellt werden und die Befehle beeinflussen? Bei mir ists leider etwas her, bin grad erst dabei, meine Delphi-Sachen wieder aufzufrischen.

----
Edit
----

So, auch wenn ich jetzt vielleicht erschlagen werde, aber: Könnte es sein, daß hier das Windows-Roaming zuschlägt? Das heißt, beim FileExists z. B. ist es aktiv, beim Rewrite dann aber nicht? Und dann handelt es sich physisch gesehen um 2 verschiedene Pfade, und das könnte dann auch eine Ursache für diesen eigenartigen "Fehler" sein. Im Übrigen habe ich ein altes Programm auf meiner Festplatte gefunden, wo ich auf das Problem gestoßen bin, daß ich mit NTFS-Berechtigungen kollidiert bin. FileExists meinte, Datei existiert nicht, Rewrite hat mir dann genau einen solchen Fehler um die Ohren gehauen (lt. meinem Kommentar im Programm genau diesen Fehlercode). Man sollte meinen, in so einem Fall gibt es einen anderen Fehlercode (Zugriff verweigert), aber weil die Datei bereits existiert, kommt es beim Versuch, diese Datei neu zu erstellen, tatsächlich (nachvollziehbarer Weise) (unter XP) zu ebendiesem komischen Verhalten.