Verzeichnissuche
- cloidnerux
- Moderator
- Beiträge: 3123
- Registriert: Fr Sep 26, 2008 4:37 pm
- Wohnort: Ram (Gibts wirklich)
Re: Verzeichnissuche
Ich kenne mich noch nicht sonderlich viel mit Cmake aus, reichte aber um mein Teil von Dedupe bisher in Cmake zu integrieren.
Du musst immer beachten, dass du in jedem unterordner wieder eine CmakeList datei brauchst, die angibt, welche Dateien dieses ordners gebraucht werden und welche Unterornder mit eingebunden werden soll.
Dann teilst du nur noch in der Übergeordneten CMakeList per add_subdirectory (@Kerli: was macht das include_directory?) cmake mit, diesen ordner auch zu benutzen.
Du musst immer beachten, dass du in jedem unterordner wieder eine CmakeList datei brauchst, die angibt, welche Dateien dieses ordners gebraucht werden und welche Unterornder mit eingebunden werden soll.
Dann teilst du nur noch in der Übergeordneten CMakeList per add_subdirectory (@Kerli: was macht das include_directory?) cmake mit, diesen ordner auch zu benutzen.
Redundanz macht wiederholen unnötig.
quod erat expectandum
quod erat expectandum
Re: Verzeichnissuche
Ich werde mir das einmal anschauenBebu hat geschrieben:Ich scheitere einfach daran, das ich mich mit Cmake nicht wirklich auskenne und immer einen Kompilerfehler bekomme, sobald ich das Unterverzeichnis mitbenutze. Darum wende ich mich ja an jemanden, der sich auskennt
Falls du oder natürlich auch wer anders mehr zu CMake lernen möchte wäre zb hier oder hier ein guter Anfang.
Es fügt das/die angebene(n) Verzeichnis zum Includepfad hinzu. Das gleiche gibt es auch noch für den Linker mit 'link_directories'.cloidnerux hat geschrieben:@Kerli: was macht das include_directory?
"Make it idiot-proof and someone will invent an even better idiot." (programmers wisdom)
OpenGL Tutorials und vieles mehr rund ums Programmieren: http://www.tomprogs.at
OpenGL Tutorials und vieles mehr rund ums Programmieren: http://www.tomprogs.at
- 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
So habe gerade eine neue Version hochgeladen, diesmal mit funktionierendem Buildsystem
Fragt mich lieber nicht, wie lange ich gebraucht habe und woran es letztlich gescheitert ist
Es klappt jetzt jedenfalls. Das ganze enthält jetzt auch einen Ordner für Windows, allerdings ist der Code dort drinnen noch nicht portiert, also keine falschen Hoffnungen
Fragt mich lieber nicht, wie lange ich gebraucht habe und woran es letztlich gescheitert ist
Es klappt jetzt jedenfalls. Das ganze enthält jetzt auch einen Ordner für Windows, allerdings ist der Code dort drinnen noch nicht portiert, also keine falschen Hoffnungen
Wer immer nach dem Unerreichbaren jagt, der wird irgendwann auf die Schnauze fallen!
- 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
Hiermit mal eine kurze Rückmeldung zur Verzeichnissuche:
Im Hintergrund ist bisher einiges passiert, allerdings sind mir beim Codestil anpassen und Dokumentieren noch einige Ungereimtheiten aufgefallen. Die haben sich dann leider als nicht ganz so kleiner Designfehler entpuppt und so bin ich momentan dabei, die komplette Suchfunktion zu überarbeiten, was fast einem kompletten Neuschreiben gleichkommt. Ich muss euch also noch ein wenig vertrösten.
Im Hintergrund ist bisher einiges passiert, allerdings sind mir beim Codestil anpassen und Dokumentieren noch einige Ungereimtheiten aufgefallen. Die haben sich dann leider als nicht ganz so kleiner Designfehler entpuppt und so bin ich momentan dabei, die komplette Suchfunktion zu überarbeiten, was fast einem kompletten Neuschreiben gleichkommt. Ich muss euch also noch ein wenig vertrösten.
Wer immer nach dem Unerreichbaren jagt, der wird irgendwann auf die Schnauze fallen!
- fat-lobyte
- Beiträge: 1398
- Registriert: Sa Jul 05, 2008 12:23 pm
- Wohnort: ::1
- Kontaktdaten:
Re: Verzeichnissuche
Schade dass es nur im Hintergrund war... Du hättest deine Änderungen ruhig commiten können, zumindest in deinem eigenen Branch. Sind die anderen Entwickler nicht allzu unhöflich, solltest du dort deine Ruhe haben und keiner dir hineinpfuschen.Bebu hat geschrieben:Im Hintergrund ist bisher einiges passiert,
Wär auch von Vorteil,
1. als Backup, denn es kann wirklich schnell mal was in die Hose gehen (Befehl rm *~, Leerzeichen an der Falschen Stelle) und alle deine Änderungen sind weg.
2. damit das was du machst nachvollziehbar bleibt - auch wenn mal was nicht hinhaut sollte man die Änderungen trotzdem commiten (in den nächsten commits besserst du deine Fehler natürlich wieder aus). Man sollte immer irgendwie nachvollziehen können warum jemand etwas gemacht hat, und da eignet sich ein VCS mit seinen Änderungen und Commitmessages ziemlich gut dafür.
3. damit wir auch was zum schauen haben was sich bei dir so treibt - Ich glaube hier verurteilt keiner jemanden, weil er ein paar Fehler macht, aber es ist doch Spannend zuzuschauen wie die Leute denn so arbeiten. (Evtl. lernt man auch was dabei, denk ich mir zumindest ^^)
Also ruhig mal commiten, und ruhig mal öfter commiten auch wenns nicht funktioniert. (Natürlich nur auf persönliche- und Feature Branches, beim Trunk sollte man etwas vorsichtiger sein).
Sehr schön, unter anderem dafür sind die Richtlinien auch daallerdings sind mir beim Codestil anpassen und Dokumentieren noch einige Ungereimtheiten aufgefallen. Die haben sich dann leider als nicht ganz so kleiner Designfehler entpuppt und so bin ich momentan dabei, die komplette Suchfunktion zu überarbeiten, was fast einem kompletten Neuschreiben gleichkommt.
Gerüchte besagen, die GUI könnte etwas länger dauern. Ich will nicht sagen "lass dir Zeit", aber schlechtes Gewissen solltest du auch keines habenIch muss euch also noch ein wenig vertrösten.
Haters gonna hate, potatoes gonna potate.
- 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
Keine Sorge, ist mittlerweile passiert, du kannst also nach Herzenslust in meinem Brunch rumwühlen^^ Du brauchst dafür nur Linux, die Windowsversion hab ich noch nicht mal angefangenfat-lobyte hat geschrieben: Schade dass es nur im Hintergrund war... Du hättest deine Änderungen ruhig commiten können, zumindest in deinem eigenen Branch. Sind die anderen Entwickler nicht allzu unhöflich, solltest du dort deine Ruhe haben und keiner dir hineinpfuschen.
Gebe dir da vollkommen Recht, ich wollte nur keine absolute Baustelle hochladen, in der außer ein paar einzelnen Funktionen gerade nichts funktioniert hat. Ich hatte nicht viel Zeit und so war es eine Dauerbaustelle ^^fat-lobyte hat geschrieben: Wär auch von Vorteil,
1. als Backup, denn es kann wirklich schnell mal was in die Hose gehen (Befehl rm *~, Leerzeichen an der Falschen Stelle) und alle deine Änderungen sind weg.
2. damit das was du machst nachvollziehbar bleibt - auch wenn mal was nicht hinhaut sollte man die Änderungen trotzdem commiten (in den nächsten commits besserst du deine Fehler natürlich wieder aus). Man sollte immer irgendwie nachvollziehen können warum jemand etwas gemacht hat, und da eignet sich ein VCS mit seinen Änderungen und Commitmessages ziemlich gut dafür.
3. damit wir auch was zum schauen haben was sich bei dir so treibt - Ich glaube hier verurteilt keiner jemanden, weil er ein paar Fehler macht, aber es ist doch Spannend zuzuschauen wie die Leute denn so arbeiten. (Evtl. lernt man auch was dabei, denk ich mir zumindest ^^)
Also ruhig mal commiten, und ruhig mal öfter commiten auch wenns nicht funktioniert. (Natürlich nur auf persönliche- und Feature Branches, beim Trunk sollte man etwas vorsichtiger sein).
Zeit lassen wäre eine schlechte Idee, aber ich arbeite eh nur daran, wenn ich Zeit und Lust habe. Aber ein bisschen schlechtes Gewissen hilft weiterzumachenfat-lobyte hat geschrieben:Gerüchte besagen, die GUI könnte etwas länger dauern. Ich will nicht sagen "lass dir Zeit", aber schlechtes Gewissen solltest du auch keines haben
Wer immer nach dem Unerreichbaren jagt, der wird irgendwann auf die Schnauze fallen!
- fat-lobyte
- Beiträge: 1398
- Registriert: Sa Jul 05, 2008 12:23 pm
- Wohnort: ::1
- Kontaktdaten:
Re: Verzeichnissuche
Mmmhh, lecker. Ich wühle gerne in anderer Leute Essen rumBebu hat geschrieben:du kannst also nach Herzenslust in meinem Brunch rumwühlen^^
Frage ab den/die Projektmanager: vielleicht wäre es nicht so schlecht die POSIX-Version erstmal halbwegs funktionierend zu machen und in den Trunk zu mergen und dann erst mit der WinAPI-Version anzufangen?Bebu hat geschrieben:Du brauchst dafür nur Linux, die Windowsversion hab ich noch nicht mal angefangen
Ist das nicht normal? Wo wenn nicht auf einer Baustelle baut man Gebäude? Wie gesagt, der Trunk sollte einigermaßen sauber bleiben, aber die Branches sind genau der Platz für Baustellen.Bebu hat geschrieben:Gebe dir da vollkommen Recht, ich wollte nur keine absolute Baustelle hochladen, in der außer ein paar einzelnen Funktionen gerade nichts funktioniert hat. Ich hatte nicht viel Zeit und so war es eine Dauerbaustelle ^^
Wichtig ist einfach, dass keiner Angst vor Commits hat. Das ist etwas was mir an Subversion nicht gefällt, da sind Commits zu einschüchternd gestaltet (hilfe, da brauch ich ja wieder Internet, das wird ja auf den Server hochgeladen, das steigert die Commitnummer, ...) was ich für den Falschen Weg halte. Ich bin mehr Fan der Philosophie Commit early, Commit often die Gründe kann man in diesem Lesenswerten Artikel nachlesen: http://blog.red-bean.com/sussman/?p=96 . Mit etwas cooleren Versionsverwaltungssystemen könnte man dann nämlich lustige Dinge anstellen.
Hier wird Xin vielleicht anderer Meinung sein?
Ich versuch mir mal deinen Code anzuschauen. Wenn gewünscht gibts dann Feedback (aber nicht vergessen, bin auch nur ein Mensch und brauch Zeit zum nachvollziehen ^^)
Haters gonna hate, potatoes gonna potate.
- 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
Du kannst da gerne reinschauen, der wirklich relevante Teil ist aber gerade auskommentiert, weil noch nicht überarbeitet. Für mich nimmt dieses Modul immer größere Züge an, das Ding wird langsam zu einem Framework Aber solange ich noch selber den Überblick behalte, gehts noch.
Habe dir auch noch den heutigen Arbeitsstand hochgeladen. Bitte bei der Funktion File::Search nicht zu genau schauen, das ist meine aktuelle Baustelle und der aktuelle Lösungsansatz gefällt mir so noch nicht.
Habe dir auch noch den heutigen Arbeitsstand hochgeladen. Bitte bei der Funktion File::Search nicht zu genau schauen, das ist meine aktuelle Baustelle und der aktuelle Lösungsansatz gefällt mir so noch nicht.
Wer immer nach dem Unerreichbaren jagt, der wird irgendwann auf die Schnauze fallen!
- Xin
- nur zu Besuch hier
- Beiträge: 8861
- Registriert: Fr Jul 04, 2008 11:10 pm
- Wohnort: /home/xin
- Kontaktdaten:
Re: Verzeichnissuche
Wie sieht es denn aus mit dem Framework?
Momentan verabschiedet es sich bei mir in einer Endlosschleife. (Er findet das Verzeichnis '.' und dann hakts).
Ich würde es gerne verwenden, um den Inhalt eines Verzeichnisses auszulesen. Die NCurses-Version braucht schließlich auch einen Datei-Browser.
Momentan verabschiedet es sich bei mir in einer Endlosschleife. (Er findet das Verzeichnis '.' und dann hakts).
Ich würde es gerne verwenden, um den Inhalt eines Verzeichnisses auszulesen. Die NCurses-Version braucht schließlich auch einen Datei-Browser.
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.
Ich beantworte keine generellen Programmierfragen per PN oder Mail. Dafür ist das Forum da.
Re: Verzeichnissuche
Ich habe file.h und file.cpp mal überflogen und habe dazu ein paar Verbesserungsvorschläge:
Gleich mal die Dateinamen: Wenn sie die Methoden zum Durchsuchen von Verzeichnissen enthalten, wäre es doch sinnvoll sie filesearch.h und filesearch.cpp zu nennen.
Des weiteren finde ich das irgendwie widersprüchlich:
Wenn ich (als nicht-Ersteller dieser Klasse) den Namen "File" lese, denke ich an eine einzelne Datei. Das dürfte bei dir wohl "FileInfo" sein.
Deine Schreibweise bei den Konstruktoren finde ich nicht sehr übersichtlich:
Wie wär's damit:
Wo wir gerade bei der Formatierung sind... haben wir uns auf eine maximale Zeilenbreite geeinigt? 80 Zeichen wären auch für Konsolen-Editoren optimal, jedoch finde ich das etwas wenig.
Ein paar Methoden geben Vektoren zurück, z.B.:
Jetzt stell dir vor du hast ein paar tausend (millionen?) Suchergebnisse und gibst diese zurück. Der komplette Vektor (und damit jeder einzelne Wert im Vektor) wird kopiert... Wesentlich effizienter wäre es eine konstante Referenz zurückzugeben.
Irgendwo habe ich folgende Zeilen gesehen:
Ich kenne deinen Algorithmus nicht und weiß nicht was genau du hier überprüfst (naja die ersten beiden Zeilen kann ich mir schon denken ^^), aber das riecht geradezu nach Fehler ^^
Bist du dir bei dieser Formulierung sicher? Überdenke wie diese Bedingung ausgewertet wird und (egal ob es richtig ist oder nicht) setze entsprechende Klammern.
Weiters hat die Methode FileSearch::File::Thread kein return, obwohl void * als Rückgabetyp angegeben wurde, aber das hat dir dein Compiler hoffentlich auch schon gesagt
Kleiner Hinweis:
Den zweiten Parameter kannst du dir sparen, es wird über ein Default-Parameter der komplette restliche String gelöscht, siehe:
http://www.cplusplus.com/reference/string/string/erase/
So... nun zur Sprache
Für die Funktionalität des Programms unbedeutend, trotzdem finde ich es wichtig, dass man sich (sowohl in Kommentaren, als auch in Variablennamen etc.) zumindest grob an die Grammatik hält.
Bis auf den Satzanfang wird normalerweise alles klein geschrieben (Ausnahme: Eigennamen, in diesem Fall auch Variablennamen etc.).
Mehrzahl wird bis auf wenige Ausnahmen durch das simple Anhängen eines 's' erreicht ("path" wird zu "paths" und nicht zu "pathes"). Befindet sich ein 'y' am Ende des Wortes wird dieses nach "ie" aufgelöst ("directory" wird zu "directories" und nicht zu "directorys").
Mir fällt jetzt keine Regel dazu ein, es heißt aber "is_stopped" und nicht "is_stoped" ^^
Grammatik-Leerstunde-Ende
Wie bereits im ersten Satz gesagt sind das Verbesserungsvorschläge, es liegt also an dir die Vorschläge zu überdenken und Verbesserungen vorzunehmen - oder eben nicht. Den Code habe ich wie erwähnt nur überflogen, also korrigiere ich hier vielleicht auch Sachen ohne sie im notwendigen Kontext zu sehen ^^
Gleich mal die Dateinamen: Wenn sie die Methoden zum Durchsuchen von Verzeichnissen enthalten, wäre es doch sinnvoll sie filesearch.h und filesearch.cpp zu nennen.
Des weiteren finde ich das irgendwie widersprüchlich:
Code: Alles auswählen
/**
*This class represents the search-module.
*It starts a thread for the search and
*is searching recursivly all files below the
*given path.
*/
class File
Deine Schreibweise bei den Konstruktoren finde ich nicht sehr übersichtlich:
Code: Alles auswählen
FileSearch::File::File( std::string &start_path,
std::string &argv0 )
:
Path( start_path ),
ProgramPath( argv0 ),
SearchState( Dedupe::State::sleep ),
FileCounter( 0 ),
DirectoryCounter( 0 )
{
Path = CreateAbsolutePath( Path );
Directorys.push_back( Path );
pthread_create( &SearchThread,NULL,Thread,this );
};
Code: Alles auswählen
FileSearch::File::File( std::string &start_path, std::string &argv0 ) :
Path( start_path ),
ProgramPath( argv0 ),
SearchState( Dedupe::State::sleep ),
FileCounter( 0 ),
DirectoryCounter( 0 )
{
Path = CreateAbsolutePath( Path );
Directorys.push_back( Path );
pthread_create( &SearchThread,NULL,Thread,this );
};
Ein paar Methoden geben Vektoren zurück, z.B.:
Code: Alles auswählen
typedef std::vector<Dedupe::FileInfo> SearchResult;
SearchResult GetFiles();
Irgendwo habe ich folgende Zeilen gesehen:
Code: Alles auswählen
if( existing == true &&
readable == true &&
filetyp == FileSearch::TFile ||
filetyp == FileSearch::TDirectory )
Bist du dir bei dieser Formulierung sicher? Überdenke wie diese Bedingung ausgewertet wird und (egal ob es richtig ist oder nicht) setze entsprechende Klammern.
Weiters hat die Methode FileSearch::File::Thread kein return, obwohl void * als Rückgabetyp angegeben wurde, aber das hat dir dein Compiler hoffentlich auch schon gesagt
Kleiner Hinweis:
Code: Alles auswählen
execpath.erase( ProgramPath.find_last_of( "/" ) + 1,
ProgramPath.length() );
http://www.cplusplus.com/reference/string/string/erase/
So... nun zur Sprache
Für die Funktionalität des Programms unbedeutend, trotzdem finde ich es wichtig, dass man sich (sowohl in Kommentaren, als auch in Variablennamen etc.) zumindest grob an die Grammatik hält.
Bis auf den Satzanfang wird normalerweise alles klein geschrieben (Ausnahme: Eigennamen, in diesem Fall auch Variablennamen etc.).
Mehrzahl wird bis auf wenige Ausnahmen durch das simple Anhängen eines 's' erreicht ("path" wird zu "paths" und nicht zu "pathes"). Befindet sich ein 'y' am Ende des Wortes wird dieses nach "ie" aufgelöst ("directory" wird zu "directories" und nicht zu "directorys").
Mir fällt jetzt keine Regel dazu ein, es heißt aber "is_stopped" und nicht "is_stoped" ^^
Grammatik-Leerstunde-Ende
Wie bereits im ersten Satz gesagt sind das Verbesserungsvorschläge, es liegt also an dir die Vorschläge zu überdenken und Verbesserungen vorzunehmen - oder eben nicht. Den Code habe ich wie erwähnt nur überflogen, also korrigiere ich hier vielleicht auch Sachen ohne sie im notwendigen Kontext zu sehen ^^