brauche Programmierhilfe - Policy Klasse
-
Hi!
Der Titel ist vielaussagend ;o)
Ich habe mir ein Progrämmchen gebastelt um doppelte Dateien zu finden und möchte es nun als Beispiel weitergeben. Es Zeigt wie man Arbeiten die Compilerabhängig so verschoben werden können das es wenig Probleme gibt.
Ich verfüge nur über die Compiler VC (7.0 / 7.1) und Borland C++ Builder (6).
Ich bräuchte folgende Klasse für möglichst viele andere Compiler und eure Hilfe dazu.
Die Vorschrift für die Klasse sieht so aus (geerbt wird sie privat):
struct <Name> { void BuildMap(const std::string & pfad,std::multimap<size_t,std::string> & map); };
Die Implementierung von BuildMap muß die multimap mit der Dateigröße und dem vollständigen Dateinamen (inkl. Pfad) eintragen.
Für den VC / MFC sieht das bei mir z.B. so aus:
#include <io.h> void MFCMapBuilder::BuildMap(const std::string & pfad,std::multimap<size_t,std::string> & SizeFileMap) { CFileFind find; //find.MatchesMask(); bool breakit = find.FindFile( (pfad + "*.*").c_str())!= 0; if(!breakit) return; while(breakit) { breakit = find.FindNextFile() != 0; if(find.IsDirectory() || find.IsDots() || find.GetLength() == 0) continue; SizeFileMap.insert(std::make_pair<size_t,std::string> (static_cast<size_t>(find.GetLength()) ,static_cast<LPCSTR>(find.GetFilePath()))); } find.Close(); }
Ich bräuchte dann noch die Compiler Makros oder precompiler dingen (ka wie die heissen) um die Policeklasse einbinden zu können - der Anwender soll von der unterschiedlichkeit der Klassen nur was merken wenn er keinen passenden Compiler hat. Das soll z.B. so aussehen:
#ifdef _MSC_VER #ifdef _MFC_VER #include "Policy\VC\MFCMapBuilder.h" typedef CompareDoubleFilesBin_<MFCMapBuilder> CompareDoubleFilesBin; #else if #include "Policy\VC\VCMapBuilder.h" typedef CompareDoubleFilesBin_<VCMapBuilder> CompareDoubleFilesBin; #endif #elif __BORLANDC__ #ifdef INC_VCL #include "Policy\BCB\VCLMapBuilder.h" typedef CompareDoubleFilesBin_<VCLMapBuilder> CompareDoubleFilesBin; #else #include "Policy\BCB\BCBMapBuilder.h" typedef CompareDoubleFilesBin_<BCBMapBuilder> CompareDoubleFilesBin; #endif #endif
Das was ich bisher zusammenhab kann unter
http://developer.rothmichael.de/c/download/FindDoubleFilesBinary.zip
gesaugt werden.Ich würde mich freuen wenn jemand so nett ist und mir die o.g. Klassen für verschiedene Compieler baut (und die auch mal testet )
thx
Michael[edit] Smilies.... [/edit]
[edit] Kann man das umgehen das beim Editieren die Link - Tags flöten gehen ?[/edit][ Dieser Beitrag wurde am 07.07.2003 um 17:38 Uhr von Knuddlbaer editiert. ]
-
was is an der funktion kompilerabhängig? bzw, wieso machst du sie kompilerabhängig, wenn es auch unabhängig geht?
-
Vielleicht die Verwendung der STL. Ich weiß nicht, aber vielleicht gibt es Compiler, die (noch) keine Templates unterstützen.
[ Dieser Beitrag wurde am 07.07.2003 um 21:15 Uhr von bIce editiert. ]
-
Original erstellt von dEUs:
was is an der funktion kompilerabhängig? bzw, wieso machst du sie kompilerabhängig, wenn es auch unabhängig geht?Na wenn ich mich entsinne ist das auslesen von Verzeichnisen nicht im standard definiert und compiler bzw. OS abhängig.
Wenn es also unabhängig geht dann bitte ein Beispiel oder einen link.
[ Dieser Beitrag wurde am 07.07.2003 um 21:38 Uhr von Knuddlbaer editiert. ]
Klar, die WinApi O Ok, damit bekomm ich es wengst für die Windowsplattform realisiert - zudem hat Hume ja auf seiner Page ne streamklasse für.
Thx für de Denkanstoss
[ Dieser Beitrag wurde am 07.07.2003 um 21:54 Uhr von Knuddlbaer editiert. ]
-
das hier ist doch das einzige das mfc spezifisch ist aber der cbuilder kann das auch : -> CFileFind find;
-
Original erstellt von bIce:
**Vielleicht die Verwendung der STL. Ich weiß nicht, aber vielleicht gibt es Compiler, die (noch) keine Templates unterstützen.[ Dieser Beitrag wurde am 07.07.2003 um 21:15 Uhr von [qb]bIce** editiert. ][/QB]
ich seh keine template implementierung hier .. sondern nur ne explizite typumwandlung ..
-
Original erstellt von 1ntrud0r:
das hier ist doch das einzige das mfc spezifisch ist aber der cbuilder kann das auch : -> CFileFind find;Jo das Ziel ists ja gewesen für jeden Compiler die Klasse zu liefern. Da die WinApi das aber hergibt hat sich das eigentlich erledigt. (Die Compilereigenen Varianten unterscheiden sich in wenigen Punkten weswegen der Source nicht auf andere Compiler übernommen werden kann,es sei denn es geht über die API des OS.)
-
hmm beim cbuilder sind auch mfc header dabei eventuell hast ja glück aber auf lowlevel ides gehts glaub net ..
-
Hm, ich werds über die WInApi abbilden.
Eigentlich gings ja darum meinen Auszubildenden ein paar Beispiele zu geben und da hätt ich gern ein paar weitere Beispiele aus anderen Compilerecken gehabt, da die meisten Compiler ja was eigenes dazu anbieten. _findfirst z.B. aus der guten MS-DOS Zeit , wenns mal keine WinAPI sein darf
Da ich aber morgen schulen muß werd ich mit meinen 4 Beispielen leben müssen. bzw. 5 - jetzt ja auch mit WinApi (Beispiel 6 mit der Streamklasse schaff ich Zeitlich nich mehr)