目录列表程序出错,c++

Directory lister program is faulty , C++

本文关键字:c++ 程序出错 列表      更新时间:2023-10-16

我正在编写一个程序来收集目录和用户文件夹名称,请记住,我这样做是作为一种爱好,尽管如果我幸运的话,明年我可能会学习计算机科学。

语言:c++

IDE: Code Blocks

问题:它应该在下面的目录中创建一个包含文件列表的文本文件,但是当我运行它时,它没有这样做,它什么也不做。

代码:

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;
}

同样w_file函数是这样的:

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;
}

编译器输出:

进程终止状态为0(0分钟,1秒)0错误(s), 0警告(s)(0分钟(s), 1秒(s))


错误代码#1,#2,#3:

在此之前,我没有额外的括号,例如while(drnt = readdir(dir)),但是编译器给了我3个关于没有足够的括号的警告(编译成功但不工作),所以我添加了它们,但它仍然不工作。

我也尝试使用"=="而不是"=",但它挂起了程序,它崩溃了。在它崩溃之前,它成功地制作了"directories.txt"。


:

我想还有其他代码我没有写好,但我不知道,因为我不擅长编程。你们能帮我修一下吗?我相信我会从中学到一些东西。谢谢你!


另一个注意事项:

我不是特别擅长使用direct .h,每次我使用它我都很模糊,我通常查找示例并复制最简单的使用(我很惭愧,但我在阅读文档时非常困惑)。

提供给readdir()的参数应该是opendir()先前返回的值-在您提供空指针时导致错误。

opendir()返回的值永远不会存储在变量中——这意味着它会立即被丢弃,当然也不会传递给readdir()

检查函数的返回值通常是个好主意。例如,opendir()在出错时返回空指针。

我还没有仔细观察,以确定是否有其他问题....但是解决我发现的问题对你来说是有教育意义的。