Eingabe eines Ordners mit einem Vorlagenpfad – C++ MFCC++

Programme in C++. Entwicklerforum
Anonymous
 Eingabe eines Ordners mit einem Vorlagenpfad – C++ MFC

Post by Anonymous »

Ich verwende Visual Studio C++ 2017 Professional und MFC

Ich arbeite an einem Projekt, das eine Funktion hat, die Dateipfade (wie C:/foo1/foo2/foo3.txt) als Strings sammelt, wenn eine Datei mit diesem Pfad vorhanden ist (gefunden über die Dateisystem-Bibliothek).
Auf den ersten Blick sieht das einfach aus, bis ich die Datei sehe Pfade sind oft einfach (in Ermangelung eines besseren Wortes) Vorlagen.
Mein Programm erhält einen Vorlagendateipfad wie diesen:

Code: Select all

C:/User/Documents/%A/%B.txt
, wobei %A ein Jahr darstellt (für das mein Programm einen Bereich hat und jedes Jahr im Vergleich zum Vorlagenordner iteriert) und %B der Monat ist, wiederum iterierend.
Es wird nur noch komplizierter, weil wir jetzt zwei weitere Vorlagensymbole hinzufügen: * und ?.
Zum Beispiel:

Code: Select all

C:/User/Documents/*_%A_??_*/%B_*.txt
.
Hier steht * für 0 oder mehr Zeichen und ? für ein Zeichen.
Im Beispiel sollte also ein Dateipfad wie: C:/User/Documents/smile_2022_A1_/07_ABCDEFGHIJKLMNOP.txt gefunden und als Zeichenfolge gespeichert werden.
Ich kann trennen den Dateipfad über Tokenisierung, was bedeutet, dass ich bereits eine Funktion habe, die einen Vektor sammelt, der beispielsweise mit C:, foo1, foo2, foo3.txt gefüllt ist. Damit kann ich den Vektor entweder mit einer Schleife durchlaufen oder rekursiv einen Ordner eingeben, bis ich entweder:
  • eine Sackgasse erreiche (d. h. der Ordner oder die Datei existiert nicht)
  • die gewünschte Datei erreiche und ihren gesamten Pfad als Zeichenfolge speichere
Ein Gedanke, der mir eingefallen ist, ist, nach _-Symbolen zu suchen und den Ordner zu trennen oder Dateinamen mit diesen, aber dem wird entgegengewirkt durch:
  • wenn das * oder ? ein _ enthält
  • wenn der Ordner- oder Dateiname einfach kein _ enthält
Die Lösung, nach der ich suche, verwendet im Idealfall keinen regulären Ausdruck. Wenn dies jedoch die einzige Lösung ist (natürlich möchte ich keine Regex neu erstellen), beraten Sie mich bitte, wie ich sie bei unterschiedlichen Pfadkomplexitäten verwenden kann, da meine Funktion sowohl reguläre Ordnerpfade ohne Vorlagensymbole als auch solche mit diesen zulassen sollte.
Der Grund, warum ich keine Regex sage, liegt darin, dass sie meines Wissens nach etwas strenger ist, wenn es um den Vergleich einer Datei geht. Es wird erwartet, dass die Zeichenfolge auf eine bestimmte generische, aber konsistente Weise geschrieben wird. Allerdings kann ich in meinem Fall nicht erwarten, dass ein Benutzer seine Ordner einheitlich benennt...

Quick Reply

Change Text Case: 
   
  • Similar Topics
    Replies
    Views
    Last post