Datei auf vorhanden überprüfen



  • Unter Windows ist GetFileAttributes eine der schnellsten Möglichkeiten.
    File öffnen dauert wesentlich länger.



  • BitWax schrieb:

    Vergiss aber nicht das Handle dann auch wieder zu schließen

    Wenn er (wie man im C++-Forum doch wohl hoffen darf) nicht irgendwelche c-Funktionen sondern einen fstream benutzt, wird die Datei automatisch mit dem Dtor des fstreams wieder geschlossen, RAII sei Dank.

    Unter Windows ist GetFileAttributes eine der schnellsten Möglichkeiten.
    File öffnen dauert wesentlich länger.

    Wenn man jetzt von dem unwahrscheinlichen Versuch absieht, eine Datei oeffnen zu wollen, die erst von einem Taperoboter geholt werden muss, bei der das Betriebssystem aber auf jeden Fall das Vorhandensein ohne den Roboter ueberpruefen kann, dann sollte es relativ egal sein, ob man bei einem (oder auch 10 oder 100) Test auf Vorhandensein jetzt die Handvoll Millisekunden laenger braucht. Ich wuerde da rein aus aesthetischen und Portabilitaetsgruenden auf die Verwendung der WinAPI verzichten.



  • pumuckl schrieb:

    Wenn er (wie man im C++-Forum doch wohl hoffen darf) nicht irgendwelche c-Funktionen sondern einen fstream benutzt, wird die Datei automatisch mit dem Dtor des fstreams wieder geschlossen, RAII sei Dank.

    Wusste ich nicht, wieder was gelernt 🙂



  • ich hoff ich hab da nicht wieder dummfug erzaehlt *schnell nachschauen geh*

    edit: laut meinem Buechlein gibts bei fstreams auch eine methode close(). Ich hab allerdings nicht rausfinden koennen ob die vom Dtor automatisch aufgerufen wird, wenn mans denn verpennt hat. Also besser doch manuell schliessen...



  • pumuckl schrieb:

    edit: laut meinem Buechlein gibts bei fstreams auch eine methode close(). Ich hab allerdings nicht rausfinden koennen ob die vom Dtor automatisch aufgerufen wird, wenn mans denn verpennt hat.

    Wird sie. Ich würde auch behaupten Klassen, die hinter sich nicht selbstverständlich aufräumen, haben in einer Standardbibliothek nichts zu suchen.



  • pumuckl schrieb:

    Unter Windows ist GetFileAttributes eine der schnellsten Möglichkeiten.
    File öffnen dauert wesentlich länger.

    Wenn man jetzt von dem unwahrscheinlichen Versuch absieht, eine Datei oeffnen zu wollen, die erst von einem Taperoboter geholt werden muss, bei der das Betriebssystem aber auf jeden Fall das Vorhandensein ohne den Roboter ueberpruefen kann, dann sollte es relativ egal sein, ob man bei einem (oder auch 10 oder 100) Test auf Vorhandensein jetzt die Handvoll Millisekunden laenger braucht. Ich wuerde da rein aus aesthetischen und Portabilitaetsgruenden auf die Verwendung der WinAPI verzichten.

    Blablablaaaaaaaaaaaaaaaah.
    Und?
    Es *ist* langsamer, und zwar dramatisch langsamer.
    Dass es egal ist wenn man nur eine Datei oder 10 oder so prüft... Blubb?
    Hab ich irgendwo was anderes behauptet? Muss irgendwer immer ein ABER drunterschreiben?



  • Gegenfrage: Was will man nach der Existenzfeststellung überhaupt mit einer Datei machen? In den meisten Fällen dürfte es doch darauf hinauslaufen, die Datei anschließend in irgendeiner Art weiterzuverarbeiten - also muß man sie auf jeden Fall öffnen.

    PS: Und wenn dir so viel an Optimierung liegt, dann bitte an der richtigen Stelle - und die Zugriffe aufs Dateisystem sind in den wenigsten Fällen optimierungswürdig. (sagt dir die 80-20-Regel etwas?)



  • zugriffe auf das dateisystem sind per definition eh arschlahm. bevor man da unnötig rumfrickelt, sollte man einfach die c++ standardvarianten verwenden und nen haken hinter das problem machen.



  • hustbaer schrieb:

    Blablablaaaaaaaaaaaaaaaah.
    Und?
    Es *ist* langsamer, und zwar dramatisch langsamer.
    Dass es egal ist wenn man nur eine Datei oder 10 oder so prüft... Blubb?
    Hab ich irgendwo was anderes behauptet? Muss irgendwer immer ein ABER drunterschreiben?

    Solang immer wieder jemand mit völlig sinnfreien Optimierungsideen kommt, die zu tippen länger dauert als dem Programm Zeit seines Lebens an Laufzeit gespart wird, kommt auch immer von irgendwem ein ABER 🙂



  • pumuckl schrieb:

    hustbaer schrieb:

    Blablablaaaaaaaaaaaaaaaah.
    Und?
    Es *ist* langsamer, und zwar dramatisch langsamer.
    Dass es egal ist wenn man nur eine Datei oder 10 oder so prüft... Blubb?
    Hab ich irgendwo was anderes behauptet? Muss irgendwer immer ein ABER drunterschreiben?

    Solang immer wieder jemand mit völlig sinnfreien Optimierungsideen kommt, die zu tippen länger dauert als dem Programm Zeit seines Lebens an Laufzeit gespart wird, kommt auch immer von irgendwem ein ABER 🙂

    Ich musste auch schonmal auf GetFileAttributes zurückgreifen, weil das öffnen
    zu lange gedauert hat. Von daher ist es jawohl nicht schlimm, wenn ein Hinweis
    gegeben wird, dass es schnellere Möglichkeiten gibt.

    Gruss
    Jockel



  • Ich habe keinen sinnfreien Optimierungsvorschlag gebracht, ich habe lediglich darauf hingewiesen dass es eine Möglichkeit gibt die (zigfach) schneller ist als das File zu öffnen.

    Wir verwenden in der Firma ein Programm welches das Vorhandensein + die Grösse von ~20k Dateien prüfen muss. Das Programm hat ursprünglich die open, getsize, close Methode verwendet. Nachdem wir auf GetFileAttributes umgestellt hatten wurde < 1m aus vorher ~~10m. Kannst du mir sagen wo das jetzt sinnlos oder premature oder sonstwas war?

    OMG 🙄

    Die 80:20 Regel muss bitte jeder selbst verstehen, auch noobs. Es muss nicht jedesmal darauf hingewiesen werden wenn irgendwer irgendwo eine Optimierungsmöglichkeit für etwas erwähnt was meistens (aber nicht immer) in den 20% (Rechenzeit) angesiedelt ist.



  • Genausowenig muss auf Anfaengerfragen mit Verbesserungsvorschlaegen geantwortet werden, die in Anfaengersituationen keinen merklichen Vorteil bringen. Wenn die Frage gelautet haette "ich muss 20k Dateien auf Existenz pruefen, wie mach ich das am schnellsten?", waere der Vorschlag durchaus angemessen gewesen. Ich habe dem Threadersteller auf deinen Hinweis "dauert wesentlich laenger" lediglich einen weiteren Hinweis gegeben, dass dieses "wesentlich laenger" vermutlich nicht ins Gewicht faellt. Schlussendlich solltest du da doch eignetlich dureber stehn, denn wir sind doch alle Noobs und du der Profi, da ist ein "blaaaablaaaah" nicht sonderlich sachlich und professionell 🙄 (es sei denn natuerlich das ist in deiner professionellen Umgebung gaengiger Umgangsstil, dann entschuldige bitte mein Unwissen)



  • Whatever.


Anmelden zum Antworten