目录列表程序有问题,C ++

时间:2016-08-21 11:28:54

标签: c++

我正在制作一个程序来收集目录和用户文件夹名称,请记住,我这样做是为了一个业余爱好,尽管如果我很幸运,明年我可能会选择计算机科学。

语言:C ++

IDE:代码块

问题:假设在下面的目录中创建一个带有文件列表的文本文件,但是当我运行它时,它不会这样做,它的作用就是什么。

代码:

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个错误,0个警告(0分钟,1秒(s))

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

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

我也尝试使用&#34; ==&#34;而不是&#34; =&#34;但它挂了程序,它崩溃了。在它崩溃之前它设法制作&#34; directories.txt&#34;

其他人:

我认为还有其他代码我没有正确编写,但由于我编程不好,我无法弄清楚。你们能帮帮我解决吗?我相信我会从中学到一些东西。谢谢!

另一方面说明:

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

1 个答案:

答案 0 :(得分:0)

提供给<?php class Chart extends MX_Controller { public function index() { return $this->load->view('template/dashboard/chart_view'); } public function chart_data() { $json = array(); $json['xkey'] = array(); $json['user'] = array(); $uri_segment = $this->uri->segment(5); if (isset($uri_segment)) { $range = $uri_segment; } else { $range = 'month'; } switch ($range) { case "week": $results = $this->getUserTotalByWeek(); foreach ($results as $key => $value) { $json['user'][] = array($key, $value['total']); } $date_start = strtotime('-' . date('w') . ' days'); for ($i = 0; $i < 7; $i++) { $date = date('Y-m-d', $date_start + ($i * 86400)); $json['xkey'][] = array(date('w', strtotime($date)), date('D', strtotime($date))); } break; default: echo "Your favorite color is neither red, nor green!"; } $this->output->set_header('Content-Type: application/json; charset=utf-8'); $this->output->set_output(json_encode($json)); } public function getUserTotalByWeek() { $user_data = array(); $date_start = strtotime('-' . date('w') . ' days'); for ($i = 0; $i < 7; $i++) { $date = date('Y-m-d', $date_start + ($i * 86400)); $customer_data[date('w', strtotime($date))] = array( 'day' => date('D', strtotime($date)), 'total' => 0 ); } $this->db->select('COUNT(*) AS total, date_reg'); $this->db->from('user'); $this->db->where('date_reg >=', date('Y-m-d', $date_start)); $this->db->group_by('DAYNAME(date_reg)'); $query = $this->db->get(); foreach ($query->result_array() as $result) { $user_data[date('w', strtotime($result['date_reg']))] = array( 'day' => date('D', strtotime($result['date_reg'])), 'total' => $result['total'] ); } return $user_data; } } 的参数应该是readdir()先前返回的值 - 提供空指针会导致错误。

opendir()返回的值永远不会存储在变量中 - 这意味着它会被立即丢弃,并且肯定不会传递给opendir()

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

我没有仔细研究以确定是否存在其他问题....但是,无论如何,解决我发现的问题对你来说都很有教育意义。