Dateipfad dynamisch ermitteln (zum neusten Datei-Änderungsstand) zwecks einlesen



  • Hi. Dies ist mein erster Beitrag hier :-).
    Habe gerade erst mit c++ anhand einer kleinen beruflich benötigten SW-Lösung angefangen. Bin programmiertechnisch auch schon etwas "vorbelastet" - VBA, VB, JAVA - nur eben c++ noch nicht.

    Kurze Ablauferklärung zum Progr./Problem:
    - Eine Datei [Eingabedatei] wird täglich erzeugt
    - [Eingabedatei hat IMMER gleichen Namen w005x12
    - Eingabedatei hat variable Anzahl Zeilen (max. ca.50.000) und
    - Eingabedatei hat variable Anzahl Zeichen in jeder Zeile (ca.8 - 1500), also variable Satzlänge
    - über c++Tool wird eine [Ausgabedatei] mit fester Satzlänge generiert
    - Ausgabedatei hat variable Anzahl Zeilen (max. ca.3.000.000) und
    - Ausgabedatei hat fixe Anzahl Zeichen in jeder Zeile (56 Zeichen)

    c++Tool wird täglich automatisiert über ein batchfile (muss über batch sein) gestartet
    - über batch werden zwei Argumente, nämlich [Eingabedatei] und [Ausgabedatei] an c++Tool übergeben
    - [Eingabe- bzw. Ausgabedatei] können auch als vollständige Pfadangabe erfolgen
    - diese zwei Argumente sind momentan immer unverändert, d.h. täglich gleiche Argumente zum start c++Tool
    - Funktioniert soweit auch einwandfrei 🙂

    Nun zu meiner Frage an die Profis:
    - Es wird eine Lösung benötigt wenn sich Pfad der [Eingabedatei] täglich ändert
    - Ziel ist c++Tool immer den Pfad zur neusten/aktuellsten (Änderungsdatum Datei) zu übergeben oder
    - c++Tool ermittelt diesen Pfad nach Programmstart selbst
    - Hintergrund: Eingabedatei wird auf Server mit versch. Ständen abgelegt (zur Sicherheit)
    - Nutzer der [Ausgabedatei] müssen immer mit aktuellstem/neustem Stand der [Eingabedatei] arbeiten
    - Es gibt leider auch keine Möglichkeit die neuste [Eingabedatei] z.B. immer parallel in festem Server-Ordner abzulegen.

    Suche also eigentl. Lösung zu zwei Pkten:

    1. Wie kann ich in c++ das Änderungsdatum einer bekannten Datei auslesen (und ausgeben)?
      - in VBA gibt es glaub ich einen FileDate() oder so ähnlich Befehl für sowas...

    2. Wie ermittle ich neusten Stand (Änderungsdatum) einer Datei in Server-Ordnerstruktur inkl. Unterordnern
      - in c++ selbst oder eher vorher (über batch, wie)?
      - Möglich wäre auch irgendwie die neuste Datei auf Server zu ermitteln u. in lokalen festen Ordner zu kopieren bevor c++Tool "loslegt"
      - wenn das über batch/irgendwie(?) machbar ist, müsste c++Tool nicht mal geändert werden 🙂 -wäre optimale Lösung

    Für Antworten, Tipps, Vorschläge, Anregungen etc.,
    möchte ich mich schon im Voraus herzlich bedanken.



  • Au weia, so viel Text 😮 *Puh*

    Also nochmal, du möchtest das :

    1. Das C++ Tool soll den aktuellen Pfad der Eingabedatei ermitteln, da dieser jeden Tag geändert wird. Also auf Anhieb fällt mir da eigentlich nix ein 😞

    2. Du möchtest das Änderungsdatum einer Datei auslesen. Das kannst du mit CFile::GetStatus() machen. Mit dieser Funktion kriegst du folgende Info's über eine Datei :

    CTime m_ctime - The date and time the file was created.
    CTime m_mtime - The date and time the file was last modified.
    CTime m_atime - The date and time the file was last accessed for reading.
    LONG m_size - The logical size of the file in bytes, as reported by the DIR command.
    BYTE m_attribute - The attribute byte of the file.
    char m_szFullName[_MAX_PATH] - The absolute filename in the Windows character set.

    Weitere Infos zu dieser Funktion hier : http://msdn.microsoft.com/library/default.asp?url=/library/en-us/dv_wcemfc4/html/aflrfCFilecolcolGetStatus.asp

    Liebe Grüsse
    Test-Uzer



  • Prinzipiell wäre es möglich, mit FindFirstFile / FindNextFile (Win32 API) bzw. CFindFile in einem die neueste Datei eines bestimmten Namens zu suchen.

    Das halte ich aber für ein schlechtes Konzept.
    Wie wird denn das neue verzeichnis erzeugt? Sinnvoll wäre es z.B. die verzeichnisse nach einem festen Muster anzulegen:

    c:\some files\2005-07-24\w005x12
    c:\some files\2005-07-25\w005x12



  • Danke erstmal für die schnellen und konstruktiven Antworten.
    Tipp wie man diverse Dateidaten ausliest hilft schonmal weiter 🙂 .

    Zur Ablagesystematik der sich immer nachts auf Server aktualisierenden Datei:

    - Es wird immer ein Ordner mit "timestamp" erzeugt der benötigte Datei enthält

    - Ordnername hat folgende Systematik: ABL_JahrMonatTagSdundeMinuteSekunde
    also z.B. c:\Verarbeitung\ABL_20050705023544\Datei.txt
    d.h. Ordner vom 05.07.2005 um 02:34 & 44Sek. Uhr generiert

    - von diesen ABL_-Ordnern werden momentan 10 Generationen gespeichert, dann
    der älteste gelöscht (alles automatisiert - kann ich nicht "ändern")

    Helfen diese Infos? - Hab übrigens nur soviel Text bei Beschreibung oben verwendet, um ggf. Rückfragen zu Details vorzubeugen 😃

    Allgemein: Gibt es kein SW-Tool dass (wenn einmal eingerichtet) autom. in einer Ordnerstruktur nach bestimmter (neuster) Datei sucht und diese lokal abspeichert - z.B. um lokalen PC immer auf aktuellstem Stand zu halten 😕

    Merci u. Gruß
    Marc



  • Kurz um Theam abzuschliessen: Nit dem guten alten DOS-Befehl XCOPY u. entsprechenden Parametern wurde das "suchen+kopieren der aktuellsten Datei" einfach+schnell gelöst. [über batch komplett automatisiert 😋 ]

    Danke an jeden der sich darüber Gedanken gemacht hat ➡ 👍


Anmelden zum Antworten