我正在尝试从文件夹中读取所有txt文件,包括使用C ++从所选文件夹的子目录中删除txt文件。
我实现了一个程序版本,它读取特定文件夹中的所有文本文件,但不会迭代到所有子文件夹。
#include "stdafx.h"
#include <iostream>
#include <fstream>
#include <iterator>
#include <string>
#include <dirent.h>
using namespace std;
int main() {
DIR* dir;
dirent* pdir;
dir = opendir("D:/"); // open current directory
int number_of_words=0;
int text_length = 30;
char filename[300];
while (pdir = readdir(dir))
{
cout << pdir->d_name << endl;
strcpy(filename, "D:/...");
strcat(filename, pdir->d_name);
ifstream file(filename);
std::istream_iterator<std::string> beg(file), end;
number_of_words = distance(beg,end);
cout<<"Number of words in file: "<<number_of_words<<endl;
ifstream files(filename);
char output[30];
if (file.is_open())
{
while (!files.eof())
{
files >> output;
cout<<output<<endl;
}
}
file.close();
}
closedir(dir);
return 0;
}
我应该修改哪个程序来搜索所选文件夹的子文件夹中的txt文件?
答案 0 :(得分:0)
我在这里找到了一种检查文件是否是目录的方法:Accessing Directories in C
首先应该将代码放在一个函数中,比如说,void f(char * dir),这样就可以处理多个文件夹了。然后使用上面链接中提供的代码来查找文件是否是目录。
如果是目录,请在其上调用f,如果是txt文件,请执行您想要执行的操作。
小心一件事:在每个目录中都有一些目录会将您发送到无限循环。 “”指向当前目录,“..”指向父目录,“〜”指向主目录。你可能想要排除这些。 http://en.wikipedia.org/wiki/Path_%28computing%29
答案 1 :(得分:0)
最简单的方法是编写一个read_one_file()函数,并递归调用它。
read_one_file()如下所示:
read_one_file(string filename){
if(/* this file is a directory */){
opendir(filename);
while(entry=readdir){
read_one_file(/*entry's filename*/);
}
}else{ /* this file is a regular file */
/* output the file */
}
}