Dateiname überprüfen
-
Hallo,
ich habe ein Problem mit meinem Programm.
Und zwar überprüfe ich ob eine Datei bereits existiert und falls ja würde ich diese gerne überschreiben.
Allerdings habe ich das Problem das der Dateiname unterschiedlich sein kann.
Also z.b.Datei.txt
datei.txt
datei.TXT
DATEI.txt
usw.Also habe ich das Problem das ich nicht genau weiß wie genau die Datei geschrieben ist. Nur der Name ist mir bekannt.
Gibt es eine Möglichkeit das irgendwie rauszufinden?
Ich hab bisher halt ganz einfach so überprüft.
ifstream ifile("/tmp/datei.txt"); if(ifile) { }Aber das ist leider nicht kompatibel genug.
viper01
-
Datei.txt
datei.txt
datei.TXT
DATEI.txtsind auf unix-artigen system 4 unterschiedliche dateinamen. nur unter windows systemen nicht. und unter windows kommst du mit irgendeiner der o.g. schreibweisen zum ziel.
-
Vergleiche die Dateinamen (ohne Pfad), indem Du beide Zeichenketten
in Großbuchstaben formatierst. Wenn die gleich sind hast Du Deine Datei.
-
unter Linux/UNIX ist des, wie gesagt, net so einfach, da muss man dann schon case-sensitiv vergleichen, unter Win is es wurst
-
Da mußt du dann vermutlich alle möglichen Schreibweisen ausprobieren, bis du die "passende" findest. Oder du lässt dir vom System alle Dateien des Zielordners ausgeben (wie du das machst, hängt vom OS ab) und vergleichst jede mit deinem Vorgabe-Namen (case-insensitiv).
-
Also es handelt sich hierbei um eine Linuxumgebung.
Allerdings soll das Programm auf mehreren System laufen. Und leider haben die User kein einheitlichen Namen der Datei. Also wie gesagt schreiben manche alles klein andere wieder nicht.
Aber der Inhalt der Datei ist immer der selber.Also
System1:
datei.txt
System2:
Datei.txt usw.Jetzt soll aber die Datei auch immer gefunden werden.
Ich kann mir zwar mit "ps" die Dateien im Verzeichnis auflisten aber ich kann ja mit == oder compare trotzdem nur case-sensitive überprüfen.
Ich hab es auch probiert mit tolower/toupper aber da gabs dann auch Probleme mit dem .
Wie könnte ich sowas realisieren?
viper01
-
viper01 schrieb:
Ich kann mir zwar mit "ps" die Dateien im Verzeichnis auflisten aber ich kann ja mit == oder compare trotzdem nur case-sensitive überprüfen.
Ich hab es auch probiert mit tolower/toupper aber da gabs dann auch Probleme mit dem .
Was für Probleme sollte es denn mit dem . geben? tolower() ändert nur Buchstaben - Sonderzeichen werden davon nicht beeinflusst.
(allerdings arbeitet tolower() nur auf Einzelzeichen, also müsstest du es in einer Schleife - oder mittels std::transform() - auf alle Zeichen des Dateinamens anwenden)
-
ach, darum gehts in dem problem ^^ dann wird dir wahrscheinlich wirklich nichts anderes übrig bleiben, als alle "verdächtigen" verzeichnisse zu durchforsten und jeden einzelnen dateinamen zu vergleichen.
und überleg dir eine strategie dafür, wenn mehr als eine datei gefunden wird
