schreibschutz nach _access Anwendung
-
Hallo Zusammen,
ich prüfe mit
if (_access(Datei,00) == 0)die Existenz einer Datei.
Wenn ich diese nun mit DeleteFile(Datei) löschen möchte, funktioniert das nicht.Was kann ich tun?
Gruß Thomas
-
Vieleicht mal ein bisschen mehr Code zeigen und eventuelle Fehlermeldungen
-
Hm, auch wenn in der MSDN steht, dass der Rückgabewert 0 ist, wenn die Testbedingung erfüllt ist, wird in den Beispielcodes immer auf != -1 geprüft.
Welchen Rückgabewert erhälst Du denn?
Davon abgesehen, müsstest Du nicht auf Schreibrechte prüfen, statt auf Existenz, wenn Du die Datei löschen willst?
-
Fehlermeldungen gibt es direkt keine... ich hab mir selbst eine Abfrage gebastelt die mich darauf aufmerksam machen soll, dass eine Datei eventuell geöffnet ist und deshalb nicht gelöscht werden kann. Im Ganzen sieht das etwa so aus:
while (goon) { goon = false; bool jn = true; while (jn) { jn = false; if (_access(Datei,00) == 0) { if (DeleteFile(Datei) == 0) { cout<< "Die Datei kann nicht überschrieben werden!\n"; cout<< "Wiederholen? [j,n]: "; jn = janein(); goon = true; } } } }janein() ist eine Funktion, welche bei 'j' -> true und bei 'n' -> false zurück gibt.
Der Fehler ist:
Wenn meine Datei vorhanden, aber nicht geöffnet ist, geht das Programm trotzdem in die 2. if-Abfrage (die mit dem DeleteFile), das sollte eigentlich nicht sein!?
-
Nuja es gibt ja noch remove aus cstdio
Rückgabewert ist wenns klappt 0, beim Fehler nicht 0Bei DeleteFile ist das andersrum, must also == durch != ersetzen
-
Joe_M. schrieb:
...Davon abgesehen, müsstest Du nicht auf Schreibrechte prüfen, statt auf Existenz, wenn Du die Datei löschen willst?
Dass ich auf Existenz prüfe hat einen anderen Grund, dabei geht es nicht direkt ums Löschen.
Blaze schrieb:
Nuja es gibt ja noch remove aus cstdio
Rückgabewert ist wenns klappt 0, beim Fehler nicht 0Bei DeleteFile ist das andersrum, must also == durch != ersetzen
Aber genau das möchte ich ja, er soll in if gehn wenn das Löschen nicht funktioniert hat, also DeleteFile(Datei) == 0 ... oder hab ich einen Denkfehler?
Vielleicht fällt Euch ja was besseres ein, ich denk da oft etwas kompliziert:
Es geht darum dass ich mit dem Programm Dateien erzeuge, die bestimmte Dateinamen haben. Wenn ich eine solche Datei schoneinmal erzeugt habe kann ich diese nun überschreiben oder durch einen Index erweitern.Beispiel:
1. Programmdurchlauf -> Ergebnisdatei.odb
2. Programmdurchlauf -> Ergebnisdatei(1).odb
3. Programmdurchlauf -> Ergebnisdatei(2).odbBei jedem Durchlauf werden die schon vorhandenen Ergebnisdateien aufgelisten und der Benutzer kann sich entscheiden ob er eine dieser Dateien überschreiben oder eine Datei mit einem neuen Index erstellen möchte.
Ich hab eine Prozedur geschrieben welche mir alle Indizes speichert und der Benutzer durch eine Nummernabfrage eine vorhandene Datei wählen oder einen neuen Index erzeugen kann. Diese liefert mir am Ende einen string in dem ein Dateiname drin steht. Dies kann also jetzt eine vorhandene oder eine neue Datei sein.
Nun möchte ich prüfen ob die Datei vorhanden ist
- wenn nein -> kann ich normal weitermachen
- wenn ja -> möchte ich diese Datei löschen (siehe Code oben)
-
krug33 schrieb:
oder hab ich einen Denkfehler?
Ich glaube in der MSDN stand dass DeleteFile 0 zurückgibt wenn alles OK ist.
d.h.if (DeleteFile(Datei) != 0) { cout<< "Die Datei kann nicht überschrieben werden!\n"; cout<< "Wiederholen? [j,n]: "; jn = janein(); goon = true; }== durch != ersetzen, wie ich schonmal gesagt hab
-
Blaze schrieb:
== durch != ersetzen, wie ich schonmal gesagt hab
Sorry, aber ich denke das stimmt nicht. Bei mir funktioniert
if (DeleteFile(Datei) == 0) cout<< "Die Datei kann nicht überschrieben werden!\n"; cout<< "Wiederholen? [j,n]: "; jn = janein(); goon = true;Habe meinen Fehler auch gefunden, lag wie so oft ganz wo anders.
Aber trotzdem Danke für die Hilfe...
Schönes WE
Gruß Thomas