Du bist nicht angemeldet.

Stilllegung des Forums
Das Forum wurde am 05.06.2023 nach über 20 Jahren stillgelegt (weitere Informationen und ein kleiner Rückblick).
Registrierungen, Anmeldungen und Postings sind nicht mehr möglich. Öffentliche Inhalte sind weiterhin zugänglich.
Das Team von spieleprogrammierer.de bedankt sich bei der Community für die vielen schönen Jahre.
Wenn du eine deutschsprachige Spieleentwickler-Community suchst, schau doch mal im Discord und auf ZFX vorbei!

Werbeanzeige

Anonymous

unregistriert

1

07.03.2004, 19:18

Feststellen, ob eine Datei existiert

Hallo,

nur eine kurze, simple Frage: wie kann ich (am besten mit der fstream klasse) feststellen, ob eine Datei existiert? Vielleicht lässt sich das ja auch auf ein Verzeichnis anwenden.

Vielen Dank


Beste Grüsse,
Timo

Till

Alter Hase

Beiträge: 378

Wohnort: Lincoln College, Oxford

Beruf: Student

  • Private Nachricht senden

2

07.03.2004, 19:29

Wenn du über fstream gehen willst (also ohne "GetNextFile" oder so) kannst du eine ifstream-Datei öffnen (mit Flag std::ios::nocreate) und prüfen, ob std::ios::failbit gesetzt ist.

Leider klappt das bei mir nicht immer, weil der Compiler manchmal motzt, dass er std::ios::nocreate nicht kennt, aber die VC++ 6 - MSDN-Hilfe sagt, es gäbe es.

Die andere Möglichkeit (über fstream) wäre, die Datei zu öffnen und dann beim Dateiobjekt die Methode "bad()" aufrufen (bzw "!good()", das ist noch ein wenig "kritischer") und schauen, ob "true" zurückkommt.

Das ist natürlich irgendwie ein wenig rabiat, aber mir fällt nichts besseres ein (habe es bis jetzt immer so gemacht)
DOMINVS ILLVMINATIO MEA
---
Es lebe unmanaged Code!
---
>> Meine Uni <<

koschka

Community-Fossil

Beiträge: 2 862

Wohnort: Dresden

Beruf: Student

  • Private Nachricht senden

3

07.03.2004, 21:01

ich weiss, das du das mit streams machen willst, aber ich find die fopen Variante wesentlich einfacher:

Quellcode

1
2
3
4
5
6
#include <stdio.h>

FILE* pfilehandle;
if((pfilehandle = fopen("datei.txt", "r")) == NULL)  {
// Datei nicht gefunden
}


ich hoffe der Code ist korrekt

Anonymous

unregistriert

4

07.03.2004, 22:49

Hallo,

danke für Eure Tipps. Ich habe es mit ::nocreate probiert, und es hat soweit gut funktioniert.

Kurze Nachfrage: Ich wollte es mit streams machen, um so nah wie möglich am Ansi C++ Standart zu bleiben um auch die Portierbarkeit beizubehalten. Ist es richtig, dass man sich mit fopen von der Portierbarkeit entfernt? fopen ist doch sicher nichts anderes, als eine Klasse, die intern auch mit streams arbeitet.

Bitte berichtigt mich, falls ich falsch liege.


Danke

Timo

In Deinem Beitrag befinden sich noch Fehler.
Bitte bearbeite die rot markierten Stellen und lösche diesen Text.

koschka

Community-Fossil

Beiträge: 2 862

Wohnort: Dresden

Beruf: Student

  • Private Nachricht senden

5

08.03.2004, 07:14

ich glaub nicht das fopen mit streams arbeitet. Weil die stdio Standartbibliothek ja bereits in C - Zeiten vorhanden war. Streams gibts ja erst in C++. Soweit ich weiss

Aber wenn du mit sreams arbeiten willst, also am Ansi Standart von C++ beleiben willst, ist es natürlich richtig! Ich meine nur das es mit fopen einfacher ist zu prüfen ob eine Datei exestiert

In Deinem Beitrag befinden sich noch Fehler.
Bitte bearbeite die rot markierten Stellen und lösche diesen Text.

6

08.03.2004, 14:41

fopen arbeitet Intern nicht mit den Streams, da fopen zur Standard C Bibliothek gehört und die Streams zur STL. Diese wurde erst nach der Standard C Bibliothek erstellt.

fopen ist auch keine Klasse. Es ist eine reine C Funktion.

Egal ob du nun fopen nutzt oder Streams. Mit beiden Varianten hat man keine Probleme ein Programm zu portieren. Da beide Teil der Standard Bibliotheken von C und C++ sind.
Wichtig! Ich übernehme keinerlei Verantwortung für eventl. Datenverlust oder Schäden am Rechner ;D

Werbeanzeige