Ich mache ein Programm, um Verzeichnis und Benutzer Ordner Namen zu sammeln, bedenken Sie, dass ich dies als ein Hobby mache, obwohl ich Informatik nächstes Jahr nehmen könnte, wenn ich Glück habe.Directory lister Programm ist fehlerhaft, C++
Sprache: C++
IDE: Code-Blöcke
Problem: Es wird angenommen, eine Textdatei mit einer Liste von Dateien in den Verzeichnissen unten zu schaffen, aber wenn ich es laufen, tut es nicht, dass Was es macht, ist nichts.
Code:
void directory_lister() // List folders in respective directories.
{
string dir_hos = " ";
int cycle = 0;
string dir_program = "C:\\Program Files\\";
string dir_program32 = "C:\\Program Files (x86)\\";
string dir_users = "C:\\Users\\";
while (cycle < 3){
if(dir_hos != dir_program){
dir_hos = dir_program;
cycle++;
DIR *dir = NULL;
struct dirent *drnt = NULL;
opendir(dir_hos.c_str());
while((drnt = readdir(dir))) // Faulty code #1.
{
w_file("directorylist.txt",drnt->d_name);
}
closedir(dir);
cout << cycle;
}else if(dir_hos != dir_program32){
dir_hos = dir_program32;
cycle++;
DIR *dir = NULL;
struct dirent *drnt = NULL;
opendir(dir_hos.c_str());
while((drnt = readdir(dir))) // Faulty code #2.
{
w_file("directorylist.txt",drnt->d_name);
}
closedir(dir);
cout << cycle;
}else if(dir_hos == dir_users){
dir_hos = dir_users;
cycle++;
DIR *dir = NULL;
struct dirent *drnt = NULL;
opendir(dir_hos.c_str());
while((drnt = readdir(dir))) // Faulty code #3.
{
w_file("directorylist.txt",drnt->d_name);
}
closedir(dir);
cout << cycle;
}
}
return;
}
int main(){
directory_lister();
return 0;
}
Auch w_file Funktion ist folgende:
void w_file(string filename_s, char * content)
{
// Change string to const char *
const char * filename_cc = filename_s.c_str();
// Writing File Code
ofstream file;
file.open(filename_cc,ios::app);
file << content << endl;
file.close();
return;
}
Compiler output:
Prozess mit Status beendet 0 (0 Minute (n), 1 Sekunde (s)) 0 Fehler (s), 0 Warnung (en) (0 Minute (n), 1 Sekunde (n))
Fehlerhafte Code # 1, # 2, # 3:
Vor diesem ich nicht zusätzliche Klammern haben, zB während (drnt = readdir (dir)), aber der Compiler gibt mir 3 Warnung über nicht genug Klammern (erfolgreich kompiliert, aber nicht funktioniert), also füge ich sie hinzu, aber es funktioniert immer noch nicht.
Ich habe auch versucht mit "==" anstelle von "=", aber es hanged das Programm und es stürzte ab. Bevor es abstürzte, gelang es, "directories.txt" zu machen.
Andere:
Ich denke, es andere Codes, die ich nicht richtig geschrieben, aber ich kann es nicht herausfinden, da ich bei der Programmierung schlecht bin. Können Sie mir helfen, es zu reparieren? Ich bin sicher, ich werde etwas daraus lernen. Vielen Dank!
Auf einer anderen Anmerkung:
Ich bin nicht besonders gut an dirent.h verwenden, bin jedesmal, wenn ich es benutze ich so verschwimmen, ich die einfachsten (I zu verwenden, in der Regel Beispiele suchen und kopieren bin beschämt, aber ich bin sehr verwirrt beim Lesen der Dokumentation).
Das richtige Werkzeug, um solche Probleme zu lösen, ist, Ihren Debugger zu verwenden, aber nicht bei Stack Overflow zu fragen, bevor Sie dies getan haben. Nennen Sie uns all Ihre Beobachtungen, die Sie gemacht haben, als Sie Ihren Code Schritt für Schritt auf Platz 1 durchgesehen haben. Vielleicht möchten Sie auch lesen ** [Wie kleine Programme zu debuggen (von Eric Lippert)] (https://ericlippert.com/2014/03/05/how-to-debug-small-programs/) ** Zumindest Lass uns mit [MCVE], die dein Problem reproduziert. (Dies ist ein persönlicher Aktienkommentar von πάντα ῥεῖ ™) –
@Spera (1) define "funktioniert nicht", bieten detaillierte Beschreibung des gewünschten Verhaltens vs beobachtetes Verhalten, (2) bieten ein Codebeispiel, das wir kompilieren könnten und/oder run, um das Problem zu reproduzieren (Hinweis: um ein Programm zu erstellen, benötigen Sie die Funktion 'main()'), (3) stellen Sie alle relevanten Konsolenausgaben zur Verfügung, indem Sie es in Ihren Beitrag kopieren (wie es ist, wörtlich, nicht Ihre Interpretation davon)) – Drop
@Drop, Fertig, fertig und fertig. – Spera