Verzeichnissuche

Proggen.org - Lernprojekt: Duplikatefinder
Benutzeravatar
Xin
nur zu Besuch hier
Beiträge: 8858
Registriert: Fr Jul 04, 2008 11:10 pm
Wohnort: /home/xin
Kontaktdaten:

Re: Verzeichnissuche

Beitrag von Xin » Di Aug 31, 2010 1:11 pm

Bebu hat geschrieben:Gut, dann fliegt der Teil in FileSearcher ersatzlos raus, bzw. ist eh schon geflogen ;)
Die Aufräumarbeiten sind ziemlich abgeschlossen und FileBrowser hat auch schon zwei Bugs weniger.
Ich war heute nicht zu spät bei der Arbeit, also hoffe ich auch nicht zu spät hier zu verschwinden. ^^
Ich denke, dass ich mir das heute abend mal ansehen kann.
Merke: Wer Ordnung hellt ist nicht zwangsläufig eine Leuchte.

Ich beantworte keine generellen Programmierfragen per PN oder Mail. Dafür ist das Forum da.

Benutzeravatar
Bebu
Beiträge: 562
Registriert: Mi Okt 21, 2009 6:19 pm
Wohnort: In der Nähe von Salzburg - Bin aber kein Österreicher!

Re: Verzeichnissuche

Beitrag von Bebu » Di Aug 31, 2010 3:18 pm

Super. Aus meiner Sicht, ist auch FileSearcher abgeschlossen. Jetzt gehts ans Debuggen und Testen. Da freue ich mich über Feedback. Gibts schon ein Tutorial zu den UnitTests, oder CTest?
Wer immer nach dem Unerreichbaren jagt, der wird irgendwann auf die Schnauze fallen!

Benutzeravatar
Xin
nur zu Besuch hier
Beiträge: 8858
Registriert: Fr Jul 04, 2008 11:10 pm
Wohnort: /home/xin
Kontaktdaten:

Re: Verzeichnissuche

Beitrag von Xin » Di Aug 31, 2010 3:48 pm

...und ich hatte tatsächlich übergangsweise geglaubt, es wird eine entspannte Woche. *lach* ;-)
Merke: Wer Ordnung hellt ist nicht zwangsläufig eine Leuchte.

Ich beantworte keine generellen Programmierfragen per PN oder Mail. Dafür ist das Forum da.

Benutzeravatar
fat-lobyte
Beiträge: 1398
Registriert: Sa Jul 05, 2008 12:23 pm
Wohnort: ::1
Kontaktdaten:

Re: Verzeichnissuche

Beitrag von fat-lobyte » Fr Mai 27, 2011 10:31 am

Möp.
Regression:

Code: Alles auswählen

-- The CXX compiler identification is GNU
-- Check for working CXX compiler: /usr/bin/c++
-- Check for working CXX compiler: /usr/bin/c++ -- works
-- Detecting CXX compiler ABI info
-- Detecting CXX compiler ABI info - done
-- Boost version: 1.44.0
-- Found the following Boost libraries:
--   filesystem
-- Found Curses: /usr/lib/libcurses.so 
-- Configuring done
-- Generating done
-- Build files have been written to: /home/alexander/Programming/c_cpp/dedupe/dedupe-svn/build
Scanning dependencies of target dedupe-hash
[  7%] Building CXX object hash/CMakeFiles/dedupe-hash.dir/hash32.cpp.o
[ 15%] Building CXX object hash/CMakeFiles/dedupe-hash.dir/hash64.cpp.o
Linking CXX shared library libdedupe-hash.so
[ 15%] Built target dedupe-hash
Scanning dependencies of target dedupe-filesearch
[ 23%] Building CXX object filesearch/CMakeFiles/dedupe-filesearch.dir/searchfiles.cpp.o
[ 30%] Building CXX object filesearch/CMakeFiles/dedupe-filesearch.dir/fileinfo.cpp.o
/home/alexander/Programming/c_cpp/dedupe/dedupe-svn/filesearch/fileinfo.cpp: In constructor »Dedupe::FileInfo::FileInfo::FileInfo(Dedupe::FilePath)«:
/home/alexander/Programming/c_cpp/dedupe/dedupe-svn/filesearch/fileinfo.cpp:24:43: Fehler: keine passende Funktion für Aufruf von »exists(Dedupe::FilePath&, boost::system::error_code&)«
/usr/include/boost/filesystem/v2/operations.hpp:638:17: Anmerkung: Kandidaten sind: bool boost::filesystem2::exists(const boost::filesystem2::wpath&)
/usr/include/boost/filesystem/v2/operations.hpp:637:17: Anmerkung:                  bool boost::filesystem2::exists(const boost::filesystem2::path&)
/usr/include/boost/filesystem/v2/operations.hpp:107:17: Anmerkung:                  bool boost::filesystem2::exists(boost::filesystem2::file_status)
make[2]: *** [filesearch/CMakeFiles/dedupe-filesearch.dir/fileinfo.cpp.o] Fehler 1
make[1]: *** [filesearch/CMakeFiles/dedupe-filesearch.dir/all] Fehler 2
make: *** [all] Fehler 2

Code: Alles auswählen

Pfad: .
URL: svn://svn.proggen.org/dedupe/trunk
Basis des Projektarchivs: svn://svn.proggen.org/dedupe
UUID des Projektarchivs: 0be2163b-aacd-4232-8e89-1207d9d29a66
Revision: 154
Knotentyp: Verzeichnis
Plan: normal
Letzter Autor: bebu
Letzte geänderte Rev: 154
Letztes Änderungsdatum: 2011-04-21 13:44:05 +0200 (Don, 21. Apr 2011)
Haters gonna hate, potatoes gonna potate.

Benutzeravatar
Bebu
Beiträge: 562
Registriert: Mi Okt 21, 2009 6:19 pm
Wohnort: In der Nähe von Salzburg - Bin aber kein Österreicher!

Re: Verzeichnissuche

Beitrag von Bebu » Fr Mai 27, 2011 11:17 am

Hast du auch mal Boost 1.46 versucht? Irgendwo da ist ein Haken versteckt, über den ist Xin auch schon gestolpert. Ich suche noch nach einer Möglichkeit eine bestimmte Boost Version als Required in Cmake festzulegen. Hat da jemand eine Idee?

Edit: Ich habe es gerade nochmal versucht. Bei mir baut alles so, wie es soll. Ich baue auf Debian Testing, mit den Boost Bibliotheken aus den Quellen.
Wer immer nach dem Unerreichbaren jagt, der wird irgendwann auf die Schnauze fallen!

Benutzeravatar
fat-lobyte
Beiträge: 1398
Registriert: Sa Jul 05, 2008 12:23 pm
Wohnort: ::1
Kontaktdaten:

Re: Verzeichnissuche

Beitrag von fat-lobyte » Sa Mai 28, 2011 6:11 pm

Bebu hat geschrieben:Hast du auch mal Boost 1.46 versucht?
Irgendwo da ist ein Haken versteckt, über den ist Xin auch schon gestolpert. Ich suche noch nach einer Möglichkeit eine bestimmte Boost Version als Required in Cmake festzulegen. Hat da jemand eine Idee?
Erstens: Ja, ich habe eine Idee. Nachdem ich mich um das Build-System kümmere hätte man mich ruhig per Mail, per PN oder im Buildsystem-Thread fragen können, anstatt zu verzweifeln:

Code: Alles auswählen

Index: filesearch/CMakeLists.txt
===================================================================
--- filesearch/CMakeLists.txt	(Revision 154)
+++ filesearch/CMakeLists.txt	(Arbeitskopie)
@@ -4,7 +4,7 @@
 cmake_minimum_required(VERSION 2.6)
 
 # we using boost filesystem and thread
-find_package(Boost COMPONENTS filesystem REQUIRED)
+find_package(Boost 1.46.0 COMPONENTS filesystem REQUIRED)
 
 # taking current source directory as include directory
 include_directories (${CMAKE_CURRENT_SOURCE_DIR})
Zweitens: wieso muss man denn unbedingt die Version so hoch zwingen? Und warum ist sie überhaupt schon auf 1.44? Werden da tatsächlich neue Features benötigt?
Die betreffende Codestelle:

Code: Alles auswählen

/*create a boost error_code for use in the following boost functions;
    We don't want Exceptions*/
  boost::system::error_code ec;

  if( boost::filesystem::exists( Path, ec ) )
Wieso genau wird da eigentlich der exists() Funktion der Error-Code mitgegeben? In der Doku von Boost steht nämlich nichts davon, dass diese Funktioin eine Exception werfen kann:
http://www.boost.org/doc/libs/1_44_0/li ... tml#exists
http://www.boost.org/doc/libs/1_46_1/li ... tml#exists
Ok, wie ich gerade sehe wird in der neueren Version ein filesystem_error geworfen, ich kann mir nur nicht vorstellen in welcher Situation ^^
Aber: Was ist denn so schlimm an einer exception? Ich sehe jetzt keinen Vorteil daran jedes mal

Code: Alles auswählen

    if( ec != 0 )
    {
      InfoFilesearch == Dedupe::State::IgnoreFile;
      SetErrorMessage( ec.message() );
    }
zu schreiben anstatt das ganze in einen Try-Block zu packen und genau das gleiche nur ein einziges mal im catch-Block zu schreiben. Genau dafür sind Exceptions ja eigentlich da ^^

Ps.: Hätte mir nicht vielleicht auch jemand Bescheid sagen können dass Sqlite benötigt wird, sodass man das in den CMake files ändert? Leute, wie baut ihr eigentlich euren Code???

Edit: Ich habe es gerade nochmal versucht. Bei mir baut alles so, wie es soll. Ich baue auf Debian Testing, mit den Boost Bibliotheken aus den Quellen.
Klar, du hast ja auch ein neueres Boost. Diese Überladung (mit b::s::error_code) gibts im alten noch nicht.
Haters gonna hate, potatoes gonna potate.

Benutzeravatar
fat-lobyte
Beiträge: 1398
Registriert: Sa Jul 05, 2008 12:23 pm
Wohnort: ::1
Kontaktdaten:

Re: Verzeichnissuche

Beitrag von fat-lobyte » Sa Mai 28, 2011 6:19 pm

fat-lobyte hat geschrieben:Ps.: Hätte mir nicht vielleicht auch jemand Bescheid sagen können dass Sqlite benötigt wird, sodass man das in den CMake files ändert? Leute, wie baut ihr eigentlich euren Code???
Oha, ich entschuldige mich. Es gibt anscheinend nicht mal nen sqlite finder für CMake. Allerdings ist das trotzdem kein Zustand, da sollte ich mir noch was überlegen ^^
Haters gonna hate, potatoes gonna potate.

Benutzeravatar
Bebu
Beiträge: 562
Registriert: Mi Okt 21, 2009 6:19 pm
Wohnort: In der Nähe von Salzburg - Bin aber kein Österreicher!

Re: Verzeichnissuche

Beitrag von Bebu » Sa Mai 28, 2011 11:38 pm

fat-lobyte hat geschrieben: Erstens: Ja, ich habe eine Idee. Nachdem ich mich um das Build-System kümmere hätte man mich ruhig per Mail, per PN oder im Buildsystem-Thread fragen können, anstatt zu verzweifeln
Gut, hätte ich machen können, wenn ich es nicht vergessen hätte und nicht über einen längeren Zeitraum das Gefühl gehabt hätte, das Dedupe ziemlich in Vergesseneheit geraten ist. Aber wenn man gefühlt als einziger daran entwickelt, denkt man nicht an alles, wenn es bei einem selber ordentlich baut...
fat-lobyte hat geschrieben: Zweitens: wieso muss man denn unbedingt die Version so hoch zwingen? Und warum ist sie überhaupt schon auf 1.44? Werden da tatsächlich neue Features benötigt?
Der letzte Beitrag in diesem Thread stammt von letztem August und ungefähr so lange dürfte es her sein, das ich das letzte Mal daran gearbeitet habe. Ich kann mich aber dunkel daran erinnern, das es genau daran lag, das ich die Funktionen ohne Exceptions nutzen musste. Ich benutze die Funktion b::ss::directory_iterator. Das Problem ist aber, das ich bei einer Exception unkontrolliert aus der Funktion fliege, auch wenn das Verzeichnis noch nicht ganz durchlaufen ist. Damit verliere ich meine aktuelle Position im Verzeichnis und kann nicht wieder da einsteigen wo ich aufgehört habe. Damit laufe ich Gefahr Dateien die zum Beispiel hinter einer Datei mit fehlenden Rechten liegen nicht zu erfassen. Also benutze ich die Variante, die mir nur einen Fehlercode zurückgibt und stelle so sicher, das alle Dateien erfasst werden. Innerhalb der eigentlichen Suchroutine werden haufenweise FileInfo Objekte verarbeitet und ich kann da nichts gebrauchen, das die Funktion unkontrolliert abbaut. Außerdem sehe ich keinen Sinn darin, eine nicht lesbare Datei als Ausnahme zu betrachten, das jemand einen falschen Pfad eingibt, oder für eine Datei Leserechte fehlen, dürfte wohl sehr normal sein, wenn man rekursiv sucht. Wieso so etwas dann als Ausnahme bezeichnen?
fat-lobyte hat geschrieben: Ps.: Hätte mir nicht vielleicht auch jemand Bescheid sagen können dass Sqlite benötigt wird, sodass man das in den CMake files ändert? Leute, wie baut ihr eigentlich euren Code???
Oha, ich entschuldige mich. Es gibt anscheinend nicht mal nen sqlite finder für CMake. Allerdings ist das trotzdem kein Zustand, da sollte ich mir noch was überlegen ^^
Also bin ich nicht der einzige, der keinen gefunden hat. Für CppUnit übrigens auch nicht.
Wer immer nach dem Unerreichbaren jagt, der wird irgendwann auf die Schnauze fallen!

Benutzeravatar
Xin
nur zu Besuch hier
Beiträge: 8858
Registriert: Fr Jul 04, 2008 11:10 pm
Wohnort: /home/xin
Kontaktdaten:

Re: Verzeichnissuche

Beitrag von Xin » So Mai 29, 2011 8:46 am

Mit CPPUnit gibt es sowieso ein Problem: Es kompiliert ab Visual Studio 2005 nicht mehr. ^^
Man muss die ganzen Projekte neu aufsetzen.

Aber man kann es noch gangbar machen. Ich muss da nochmal ran.
Merke: Wer Ordnung hellt ist nicht zwangsläufig eine Leuchte.

Ich beantworte keine generellen Programmierfragen per PN oder Mail. Dafür ist das Forum da.

Benutzeravatar
fat-lobyte
Beiträge: 1398
Registriert: Sa Jul 05, 2008 12:23 pm
Wohnort: ::1
Kontaktdaten:

Re: Verzeichnissuche

Beitrag von fat-lobyte » So Mai 29, 2011 10:51 am

Bebu hat geschrieben:Aber wenn man gefühlt als einziger daran entwickelt, denkt man nicht an alles, wenn es bei einem selber ordentlich baut...
Verständlich... Deswegen möpe ich ja.

Bebu hat geschrieben:Ich benutze die Funktion b::ss::directory_iterator. Das Problem ist aber, das ich bei einer Exception unkontrolliert aus der Funktion fliege, auch wenn das Verzeichnis noch nicht ganz durchlaufen ist. Damit verliere ich meine aktuelle Position im Verzeichnis und kann nicht wieder da einsteigen wo ich aufgehört habe.
Wenn du die Exception mit catch(const boost::filesystem::filesystem_error& e) abfängst, fliegst du gar nicht aus der Funktion. Aber du hast recht, wenn du die Datei dann noch verarbeiten willst bringts natürlich nichts.
Bebu hat geschrieben:Damit laufe ich Gefahr Dateien die zum Beispiel hinter einer Datei mit fehlenden Rechten liegen nicht zu erfassen. Also benutze ich die Variante, die mir nur einen Fehlercode zurückgibt und stelle so sicher, das alle Dateien erfasst werden. Innerhalb der eigentlichen Suchroutine werden haufenweise FileInfo Objekte verarbeitet und ich kann da nichts gebrauchen, das die Funktion unkontrolliert abbaut. Außerdem sehe ich keinen Sinn darin, eine nicht lesbare Datei als Ausnahme zu betrachten, das jemand einen falschen Pfad eingibt, oder für eine Datei Leserechte fehlen, dürfte wohl sehr normal sein, wenn man rekursiv sucht. Wieso so etwas dann als Ausnahme bezeichnen?
Da hast du recht, so ist das wahrscheinlich besser.

Finde ich zwar blöd mit der Boost 1.44 Kompatibilität, aber kann man nichts machen. Da werd ichs mir runterladen und kompilieren müssen.
Also bin ich nicht der einzige, der keinen gefunden hat. Für CppUnit übrigens auch nicht.
Keine Sorge, hab schon ne Idee wegen dem SQLite finder. Man kann die Finder nämlich selber schreiben, und das ist anscheinend nicht so schwierig.
Haters gonna hate, potatoes gonna potate.

Antworten