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.txt

    sind 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 😉


Anmelden zum Antworten