我正在制作一个程序来收集目录和用户文件夹名称,请记住,我这样做是为了一个业余爱好,尽管如果我很幸运,明年我可能会选择计算机科学。
语言: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,每次使用它时我都很模糊,我通常查找示例并复制最简单的例子(我很惭愧但是在阅读文档时我很困惑)
答案 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()
在错误时返回空指针。
我没有仔细研究以确定是否存在其他问题....但是,无论如何,解决我发现的问题对你来说都很有教育意义。