letzerstellte Datei eines Datentypes ermitteln
-
Super jetzt funktionierts
. Danke!Aber wie bekomme ich jetzt die Info welche Datei von einem bestimmten Dateityp als letzte erstelllt wurde und wo sie liegt????
Oder wo kann ich die letzten 5 erstellten Dateien des users einsehen?rendner
-
Dazu musst du afaik erst alle Dateien einlesen und zwischenspeichern, damit du dir dann am Ende daraus die letzten 5 raussuchen kannst

-
Gibt es da nicht eine elegantere Lösung?
Das Problem ist dabei nämlich folgendes:
Der Cookie der von dem Programm erzeugt ist, wird unter einen bestimmten Pfad gespeichert, dieser variiert ersteinmal nur durch einen Verzeichnisnamen der auf jedem Rechner anderst ist.
An diesen Pfad wird dann nocheinmal der komplette Pfad der Datei, die den Cookie legt, angehangen.
Also, jenachdem wo diese liegt (Desktop,...) ist der Pfad immer ein anderer.
Ich habe das aber so gelöst das mein Programm beim starten seinen eigenen Pfad "erfragt" (liegt ein Ordner tiefer als das Programm was den Cookie legt), somit ist der 2te Teil des Pfades kein Problem, ausnahme mal wieder
ist, wenn Datei (die die den Cookie erzeugt) in zuvielen Unterordnern abgelegt ist (also Pfad zu lang, denke ich ...),
Da wird dann nicht mehr der Pfad sondern nur ein kurzer String gespeichert.
Somit kann ich den Cookie nur mit rekursiver Suche suchen.
Denke aber das das zuviel Zeit benötigt.Wie kann man am schnellsten rekursiv "fahnden"?
Wie kann ich genau (und das 100%, ab Windows 98) prüfen ob Datei oder Verzeichnis?
Oder kann man doch noch anderst an das Problem rangehen?rendner
-
rendner schrieb:
ausnahme mal wieder
ist, wenn Datei (die die den Cookie erzeugt) in zuvielen Unterordnern abgelegt ist (also Pfad zu lang, denke ich ...),
Da wird dann nicht mehr der Pfad sondern nur ein kurzer String gespeichert.Du kannst aber keine Regelmäßigkeit erkennen, wie der Pfad dann in Kurzform aussieht?!
rendner schrieb:
Wie kann ich genau (und das 100%, ab Windows 98) prüfen ob Datei oder Verzeichnis?
http://www.c-plusplus.net/forum/viewtopic-var-t-is-39396.html
rendner schrieb:
Oder kann man doch noch anderst an das Problem rangehen?
Evtl. könnte es noch über Hooks funktionieren - also dass du das Erstellen / Schreiben von Dateien mitloggst / untersuchst. Ob das in deinem Fall funktioniert weiß ich nicht, da mir nicht ganz klar ist, was du überhaupt machen willst (was für eine Datei du suchst)
-
Ich suche eine art Textdatei (Endung "sol"), die dieses Programm erstellt (der Cookie).
Will aber nicht das mein Programm im Hintergrund irgendetwas "mithört", es soll wirklich nur starten, wenn Cookie gesetzt (wird von dem anderem Programm dann automatisch aufgerufen), dem Pfad im Cookie auslesen und dann das Verzeichnis auslesen, Inhalt des Verzeichnisses speichern fertig.Danke für den Link, hatte schon einiges aber das wahr nicht so das gelbe vom Ei und es sollte ja auch ab Win98 funzen (da habsch leider keine Ahnung was ab wann und wie :)).
Das ab, wann das mit dem kurzen String auftritt könnte ich prüfen, das ist glaub ich nicht so das Problem das rauszufinden, aber diese Datei dann so schnell wie möglich zu finden ist halt das Problem (denke ich...).
Und wie kann ich am "resourcenschonensten" rekursiv suchen?
Ich stelle mir das so vor:
Prüfen ob Verzeichnis, wenn ja in ein neues Array, dann in diesem Verzeichnis weiter nach der Datei suchen...aber da fängt es ja schon an, was ist wenn dort mehr als 1 Verzeichnis ist, wie speichere ich dies am besten ab, damit ich auch den Pfad sinvoll "ablaufen" kann...mir fehlt da etwas die Vorstellungskraft für die herangehensweise.rendner
-
Du musst eben FindFirstFile & Co. rekursiv aufrufen - afaik gab es da aber Probleme mit der Fortsetzung, wenn du aus der Rekursion wieder zurückkehrst. Deshalb kannst du einfach immer ein Verzeichnis ganz durchgehen und alle Unterverzeichnisse in einem Vector o.ä. speichern. Neue Verzeichnisse fügst du dann diesem hinzu. Am Ende eines Verzeichnisses gehst du einfach in den nächsten Ordner aus dem Vector. So habe ich mir das zumindest immer vorgestellt - vielleicht kann sich dazu ja mal jemand äußern, der das schon mal gemacht hat (oder einfach mal Forensuche oder Google befragen)
Nur was mir nicht ganz klar ist: nach welchem Kriterium willst du jetzt die richtige .sol-Datei ausfindig machen?!
-
Die richtige (Datei) erhalte ich durch den 2ten Pfad der mit angehängt wird, da er ja zu dem eigentlichem Programm führt, solange der 2te Pfad nicht als dieser ominöse kurze String gespeichert wird.
Das Problem ist auch noch, das der Cookie immer gleich heist (zB "cookie.sol"), somit müsste ich beim start meines Programms die Systemzeit "ziehen" und diese mit den Dateien abgleichen, die mit der kleinsten Differenz ist dann die die ich suche.Leider habe ich mit Vektoren noch nie gearbeitet, werde ich mir gleich mal angucken, hoffentlich ist das nicht so wild
.rendner
-
rendner schrieb:
Die richtige (Datei) erhalte ich durch den 2ten Pfad der mit angehängt wird, da er ja zu dem eigentlichem Programm führt, solange der 2te Pfad nicht als dieser ominöse kurze String gespeichert wird.
Solange du den Pfad weißt, brauchst du ja keine Rekusion

rendner schrieb:
Das Problem ist auch noch, das der Cookie immer gleich heist (zB "cookie.sol")
Was ist dabei das Problem, damit wird es doch eher einfacher.
Aber wie gesagt, solltest du erst schauen, wie der Pfad gebildet wird, denn offenbar ist das ja dein einziges Auswahlkriterium - und unter diesem Pfad gibt es dann ja nur ein cookie.sol

-
Ja, wenn der 2te Pfad stimmt, find ich die Datei ja auch, vorrausgesetzt ich weis dieses eine Verzeichnis was vor dem 2ten Pfad noch ist (was auf jedem Rechner anderst ist).
Auf meinem Rechner funktioniert das Programm super, aber bei einem anderem hatt mein Programm den Cookie nicht gefunden, obwohl er den Pfad mit dem Verzeichns(was auf jedem Rechner anderst ist) richtig angegeben hat und der Cookie vorhanden war, darum wollte ich es mal rekursiv versuchen.
Und wenn der 2te Pfad ja dieser blöde String ist muss ich ja eh rekursiv ran, und bei der gelegenheit habe ich mir gedacht kann ich auch diese eine Verzeichnis (was überall anderst ist) rekursiv rausfinden.
Somit komme ich wahrscheinlich doch nicht drumherum
.rendner
-
rendner schrieb:
Auf meinem Rechner funktioniert das Programm super, aber bei einem anderem hatt mein Programm den Cookie nicht gefunden, obwohl er den Pfad mit dem Verzeichns(was auf jedem Rechner anderst ist) richtig angegeben hat und der Cookie vorhanden war
Heißt das konkret, dass du dir den zusammengesetzten Pfad hast ausgeben lassen, dieser richtig war, aber trotzdem das Cookie nicht gefunden wurde

rendner schrieb:
darum wollte ich es mal rekursiv versuchen.
Was erhoffst du dir dabei - irgendwoher musst du doch auch da wissen, welche der evtl. mehrfach (in unterschiedl. Verzeichnissen) vorhanden cookie.sol du löschen musst.
rendner schrieb:
und bei der gelegenheit habe ich mir gedacht kann ich auch diese eine Verzeichnis (was überall anderst ist) rekursiv rausfinden.
Ich dachte, das wäre der Teil des Pfades, der auch in dem des aufrufenden Programmes enthalten ist (da es in einem Unterverzeichnis liegt). BTW: Die Rekursion brauchst du natürlich, wenn überhaupt, erst dort anfangen, wo du nicht mehr weiterweißt (also z.B. nicht direkt auf c:)
-
Heißt das konkret, dass du dir den zusammengesetzten Pfad hast ausgeben lassen, dieser richtig war, aber trotzdem das Cookie nicht gefunden wurde
Also mein Programm funktioniert folgender massen:
Mann muss in dem Ordner (wo mein Programm liegt) eine Textdatei anlegen inder der Pfad mit diesem komischen Verzeichnis enthalten ist und eine Zeile drunter den Dateinamen (wie die exe heist die den Cookie legt).
Die exe die den Cookie erstellt liegt ein Verzeichnis höher als mein Programm.
Somit wird beim starten meines Programmes diese Textdatei eingelesen, der aufenthaltsort meiner Datei "erfragt", von dem Ergebnis wird dann ein Verzeichnis hinten "abgeschnitten" und dann mit dem Inhalt der Textdatei verkettet.
Und zu guter letzt wird der Name des Cookies angehangen
Somit weis mein Programm wo der "Schlingel" steckt und liest den Inhalt des Cookies aus.Ist aber am ermittelten Treffpunkt (Pfad) kein Cookie gibts eine Fehlermeldung.
Also habe ich diesen Pfad aus der Textdatei überprüft und wie er den Cookie aus dem anderem Programm gesetzt hat und beides wahr richtig.Was erhoffst du dir dabei - irgendwoher musst du doch auch da wissen, welche der evtl. mehrfach (in unterschiedl. Verzeichnissen) vorhanden cookie.sol du löschen musst.
Der Cookie wird nicht gelöscht.
Anhand des 2ten Pfades kann ich die Cookies identifizieren (Ordner wo dann letzendlich der Cookie enthalten ist hat den namen der exe).
Ist aber anstelle des 2ten Pfades der String, kann ich nur noch mit rekursivität prüfen (falls mehrere solcher Verzeichnisse existieren), welcher Cookie als letzter abgelegt wurde.rendner
-
Ich fasse zusammen:
Cookie_Ersteller.exe
(Ordner1)
Dein_Programm.exe
Deine_Textdatei.txt
(Cookie_Ersteller)
cookie.sol
(Cookie_Ersteller)
cookie.sol
(Cookie_Ersteller)
cookie.sol
(Cookie_Ersteller)
cookie.sol
(Cookie_Ersteller)
cookie.sol
Du sagtest, dass der Ordner in dem der Cookie letztendlich ist, den gleichen Namen wie das Programm hat

edit: Das sind natürlich alles Unterordner...
-
1.) Warum holst du dir nicht über GetModuleFileName den Pfad deiner Anwendung
2.) Wann du ein Problem hast, wenn der exe-Namen der Cookie-setzenden Anwendung zu lang ist, warum lässt du dann nicht in der Textdatei direkt den Verzeichnisnamen angeben
-
Ja der Pfad unterteilt sich dann in Unterordner.
Bsp:
Die Datei die den Cookie erstellt heist cookieMaker.exe und liegt unter diesem Pfad: C:\Dokumente und Einstellungen\Benutzer\Desktop\abc
Mein Programm liegt in dem Ordner 123 (einen tiefer als cookieMaker.exe), also ist der Pfad: C:\Dokumente und Einstellungen\Benutzer\Desktop\abc\123Nun wird der Cookie erstellt und mein Programm gestartet und "erstellt" sich den Pfad aus folgenden teilen:
erster fester teil unter dem alle cookies gespeichert werden
letzter Ordner is der der auf jeden Rechner anderst istC:\Dokumente und Einstellungen\Benutzer\Anwendungsdaten\45REfc9der Pfad den mein Programm ermittelt (fragt seinen eigenen Pfad ab, und
entfernt den letzten Ordner, somit erhällt er den Pfad der cookieMaker.exe)C:\Dokumente und Einstellungen\Benutzer\Desktop\abcdann werden diese 2 etwas zurecht gestutzt und ergeben letzendlich den
Zielpfad des Cookies, cookieMaker.exe ist der Ordner wo sich der Cookie befindetC:\Dokumente und Einstellungen\Benutzer\Anwendungsdaten\45REfc9\Dokumente und Einstellungen\Benutzer\Desktop\abc\cookieMaker.exeUnd hier ein Bsp wenn der Pfad wo sich die cookieMaker.exe befindet zu lang ist:
Da ist dann der Zielpfad folgender (variiert aber auch anhand des Originalpfades):C:\Dokumente und Einstellungen\Benutzer\Anwendungsdaten\45REfc9\000006377A\cookieMaker.exeSo jetzt dürfte alles geklärt sein...
EDIT:
1.) Warum holst du dir nicht über GetModuleFileName den Pfad deiner Anwendung
Mein Programm ermittelt den Pfad anhand von GetFullPathName.
2.) Wann du ein Problem hast, wenn der exe-Namen der Cookie-setzenden Anwendung zu lang ist, warum lässt du dann nicht in der Textdatei direkt den Verzeichnisnamen angeben
Das wollte ich aber nicht, da es ja etwas "dynamisch" sein sollte.
Darum lasse ich doch den Pfad ermitteln.
Aber dies nützt nix, wenn der Pfad des Programmes als String (der kommische) gespeichert wird.rendner
-
Also wenn du von 45REfc9 nicht weißt, wie es auf dem jeweiligen Rechner heißt, dann würde ich so vorgehen:
- Mit FindFirstFile & Co. alle direkten Unterverzeichnisse von "C:\Dokumente und Einstellungen\Benutzer\Anwendungsdaten\" ausfindig machen.
- dann mit jedem von diesen testen, ob es dort das Unterverzeichnis "Dokumente und Einstellungen\Benutzer\Desktop\abc\cookieMaker.exe" gibt
- falls nicht: jeweils die direkten Unterverzeichnisse ermitteln und testen, ob dort das Verzeichnis cookieMaker.exe existiert
-
rendner schrieb:
Darum lasse ich doch den Pfad ermitteln.
Und wie machst du das bisher?
rendner schrieb:
Aber dies nützt nix, wenn der Pfad des Programmes als String (der kommische) gespeichert wird.
Das bezieht sich jetzt auf bsp. 000006377A, oder?
-
Und wie machst du das bisher?
Damit meinte ich den Ort der cookieMaker.exe, und dies geschieht mit GetFullPathName.
Das bezieht sich jetzt auf bsp. 000006377A, oder?
Ja

würde ich so vorgehen:
- Mit FindFirstFile & Co. alle direkten Unterverzeichnisse von "C:\Dokumente und Einstellungen\Benutzer\Anwendungsdaten\" ausfindig machen.
- dann mit jedem von diesen testen, ob es dort das Unterverzeichnis "Dokumente und Einstellungen\Benutzer\Desktop\abc\cookieMaker.exe" gibt
- falls nicht: jeweils die direkten Unterverzeichnisse ermitteln und testen, ob dort das Verzeichnis cookieMaker.exe existiertKann man wenn man zB das erste Verzeichnis gefunden hat das so vergleichen
erstesGefundeneVerzeichnis == Dokumente und Einstellungen\Benutzer\Desktop\abc\cookieMaker.exe
oder muss ich bei dem gefundenen Verzeichnis prüfen ob es auch die anderen enthällt???Danke ersteinmal für Deinen Beistand, muss dann mal die Tage loslegen und mal gucken ob ich rekursivität umsetzen kann.
Falls Dir noch ne tollere Lösung einfällt lass es mich wissen.rendner
-
Und wie ermittelst du bisher (du schriebst ja, dass es auf deinem Rechner funktionierst) das 45REfc9 (was ja dynamisch ist)?!
rendner schrieb:
Kann man wenn man zB das erste Verzeichnis gefunden hat das so vergleichen
erstesGefundeneVerzeichnis == Dokumente und Einstellungen\Benutzer\Desktop\abc\cookieMaker.exe
oder muss ich bei dem gefundenen Verzeichnis prüfen ob es auch die anderen enthällt???Du kannst auch einfach schon den ganzen Pfad incl. cookie.sol damit zusammen setzen und versuchen die Datei zu öffnen

-
Und wie ermittelst du bisher (du schriebst ja, dass es auf deinem Rechner funktionierst) das 45REfc9 (was ja dynamisch ist)?!
Ach ja das mit dem Verzeichnis was überall anderst ist habe ich jetzt unterschlagen

Im Ordner meines Programmes liegt eine Textdatei (die der user erstellen muss) in der der Pfad mit diesem Verzeichnis gespeichert ist und noch der Name der Anwendung die den Cookie legt.Du kannst auch einfach schon den ganzen Pfad incl. cookie.sol damit zusammen setzen und versuchen die Datei zu öffnen
Das hatte ich bisher immer gemacht, und wenn Datei nicht da, dann halt Fehlermeldung.
Also muss ich nur diesen einen Ordner (der überall anderst ist) auslesen.
Und falls der Pfad zum Cookie anderst ist (der kurze Pfad), müsste ich halt rekursiv nach dem suchen.
Hast Du vielleicht einen Tipp wie man diesen Ordner schnell und einfach "enttarnen" kann?
Leider ist dieser nicht der einzigste der Dateien mit dieser Endung (sol)enthällt.rendner
-
rendner schrieb:
Im Ordner meines Programmes liegt eine Textdatei (die der user erstellen muss) in der der Pfad mit diesem Verzeichnis gespeichert ist und noch der Name der Anwendung die den Cookie legt.
Ist das für dich OK, oder war das nur zum Test und ist genau das, was jetzt geändert werden soll?
rendner schrieb:
Du kannst auch einfach schon den ganzen Pfad incl. cookie.sol damit zusammen setzen und versuchen die Datei zu öffnen
Das hatte ich bisher immer gemacht, und wenn Datei nicht da, dann halt Fehlermeldung.
Ich hatte das gemeint zum Testen, ob der Pfad stimmt. Du probierst einfach durch, bis CreateFile ein gültiges Handle zurückliefert (evtl. geht es aber auch anders schneller).
rendner schrieb:
Also muss ich nur diesen einen Ordner (der überall anderst ist) auslesen.
Das war eben die Frage, ob das so bleiben kann, oder ob das auch dynamisch sein darf.
rendner schrieb:
Und falls der Pfad zum Cookie anderst ist (der kurze Pfad), müsste ich halt rekursiv nach dem suchen.
Eigentlich brauchst du da keine Rekursion mehr, da du ja nur die direkten Unterverzeichnisse durchgenen musst - dort musst dann ja die cookie.sol liegen.
rendner schrieb:
Leider ist dieser nicht der einzigste der Dateien mit dieser Endung (sol)enthällt.
Auch nicht die einzige cookie.sol? Falls nicht, woran willst du die richtige cookie soll erkennen (falls z.B. ein Verzeichnis 12345678 und eins 87654321 eine Datei cookie.sol enthält)?