Ich habe den folgenden Code angegeben:C++ _findfirst und TCHAR
int _tmain(int argc, _TCHAR* argv[]) {
_finddata_t dirEntry;
intptr_t dirHandle;
dirHandle = _findfirst("C:/*", &dirEntry);
int res = (int)dirHandle;
while(res != -1) {
cout << dirEntry.name << endl;
res = _findnext(dirHandle, &dirEntry);
}
_findclose(dirHandle);
cin.get();
return (0);
}
was dies tut druckt den Namen all dessen, was das angegebene Verzeichnis (C :) enthält. Jetzt muss ich den Namen von allem in den Unterverzeichnissen (wenn es welche gibt) ausgeben. Ich habe dies so weit gekommen:
int _tmain(int argc, _TCHAR* argv[]) {
_finddata_t dirEntry;
intptr_t dirHandle;
dirHandle = _findfirst(argv[1], &dirEntry);
vector<string> dirArray;
int res = (int)dirHandle;
unsigned int attribT;
while (res != -1) {
cout << dirEntry.name << endl;
res = _findnext(dirHandle, &dirEntry);
attribT = (dirEntry.attrib >> 4) & 1; //put the fifth bit into a temporary variable
//the fifth bit of attrib says if the current object that the _finddata instance contains is a folder.
if (attribT) { //if it is indeed a folder, continue (has been tested and confirmed already)
dirArray.push_back(dirEntry.name);
cout << "Pass" << endl;
//res = _findfirst(dirEntry.name, &dirEntry); //needs to get a variable which is the dirEntry.name combined with the directory specified in argv[1].
}
}
_findclose(dirHandle);
std::cin.get();
return (0);
}
Jetzt bin ich nicht für die ganze Lösung zu fragen (ich will, es zu tun in der Lage sein auf meinem eigenen), aber es gibt nur diese eine Sache Ich kann mir nicht vorstellen, was TCHAR * argv ist. Ich weiß, dass argv [1] enthält, was ich in meinen Projekteigenschaften unter "Befehlsargumente" eingegeben habe, und jetzt enthält dieses Verzeichnis das Verzeichnis, in dem ich meine Anwendung testen möchte (C:/users/name/New folder/*) einige Ordner mit Unterordnern und einigen zufälligen Dateien. Der argv [1] gibt zur Zeit folgende Fehlermeldung:
Error: argument of type "_TCHAR*" is incompatible with parameter of type "const char *"
Jetzt habe ich für die TCHAR gegoogelt und ich verstehe, es ist entweder ein wchar_t * oder char * abhängig von der Verwendung von Unicode-Zeichensatz oder Multi-Byte Zeichensatz (Ich verwende derzeit Unicode). Ich verstehe auch, dass das Umwandeln ein massiver Schmerz ist. Ich frage also: Wie kann ich das am besten mit dem Parameter _TCHAR und _findfirst umgehen?
Ich plane, den dirEntry.name zu dem argv [1] zu concaten sowie ein "*" am Ende zu verketten und dies in einem anderen _findfirst zu verwenden. Alle Kommentare zu meinem Code werden ebenfalls geschätzt, da ich immer noch C++ lerne.
'_TCHAR' ist ein Makro, das in" windows.h "definiert sein sollte. Fügen Sie diesen Header ein? –
Ich benutze Visual Studio 2015 mit einem vorkompilierten Header, also denke ich so – Arrrow