Linux和Windows系统下C++读取文件夹下文件名
参考博客 我的开发环境为Ubuntu+Qt,读取文件夹下文件名时会找不到io.h,通过查找资料了解到Windows和Linux下的头文件是不一样的,下面首先介绍Linux系统下文件名的获取一、Linux系统下文件名获取(1)C语言版本//LINUX/UNIX c获取某个目录下的所有文件的文件名 #include#includeint main(int ar
我的开发环境为Ubuntu+Qt,读取文件夹下文件名时会找不到io.h,通过查找资料了解到Windows和Linux下的头文件是不一样的,下面首先介绍Linux系统下文件名的获取
一、Linux系统下文件名获取
(1)C语言版本
//LINUX/UNIX c获取某个目录下的所有文件的文件名
#include <stdio.h>
#include <dirent.h>
int main(int argc, char * argv[])
{
struct dirent *ptr;
DIR *dir;
dir=opendir("./file");
printf("文件列表:\n");
while((ptr=readdir(dir))!=NULL)
{
//跳过'.'和'..'两个目录
if(ptr->d_name[0] == '.')
continue;
printf("%s\n",ptr->d_name);
}
closedir(dir);
return 0;
}
(2)C++版本
#include <iostream>
#include <vector>
#include <string>
#include <dirent.h>
using namespace std;
int main(int argc, char * argv[])
{
struct dirent *ptr;
DIR *dir;
string PATH = "./file";
dir=opendir(PATH.c_str());
vector<string> files;
cout << "文件列表: "<< endl;
while((ptr=readdir(dir))!=NULL)
{
//跳过'.'和'..'两个目录
if(ptr->d_name[0] == '.')
continue;
//cout << ptr->d_name << endl;
files.push_back(ptr->d_name);
}
for (int i = 0; i < files.size(); ++i)
{
cout << files[i] << endl;
}
closedir(dir);
return 0;
}
二、Windows平台
#include <io.h>
#include <fstream>
#include <string>
#include <vector>
#include <iostream>
using namespace std;
//获取所有的文件名
void GetAllFiles( string path, vector<string>& files)
{
long hFile = 0;
//文件信息
struct _finddata_t fileinfo;
string p;
if((hFile = _findfirst(p.assign(path).append("\\*").c_str(),&fileinfo)) != -1)
{
do
{
if((fileinfo.attrib & _A_SUBDIR))
{
if(strcmp(fileinfo.name,".") != 0 && strcmp(fileinfo.name,"..") != 0)
{
files.push_back(p.assign(path).append("\\").append(fileinfo.name) );
GetAllFiles( p.assign(path).append("\\").append(fileinfo.name), files );
}
}
else
{
files.push_back(p.assign(path).append("\\").append(fileinfo.name) );
}
}while(_findnext(hFile, &fileinfo) == 0);
_findclose(hFile);
}
}
//获取特定格式的文件名
void GetAllFormatFiles( string path, vector<string>& files,string format)
{
//文件句柄
long hFile = 0;
//文件信息
struct _finddata_t fileinfo;
string p;
if((hFile = _findfirst(p.assign(path).append("\\*" + format).c_str(),&fileinfo)) != -1)
{
do
{
if((fileinfo.attrib & _A_SUBDIR))
{
if(strcmp(fileinfo.name,".") != 0 && strcmp(fileinfo.name,"..") != 0)
{
//files.push_back(p.assign(path).append("\\").append(fileinfo.name) );
GetAllFormatFiles( p.assign(path).append("\\").append(fileinfo.name), files,format);
}
}
else
{
files.push_back(p.assign(path).append("\\").append(fileinfo.name) );
}
}while(_findnext(hFile, &fileinfo) == 0);
_findclose(hFile);
}
}
// 该函数有两个参数,第一个为路径字符串(string类型,最好为绝对路径);
// 第二个参数为文件夹与文件名称存储变量(vector类型,引用传递)。
// 在主函数中调用格式(并将结果保存在文件"AllFiles.txt"中,第一行为总数):
int main()
{
string filePath = "testimages\\water";
vector<string> files;
char * distAll = "AllFiles.txt";
//读取所有的文件,包括子文件的文件
//GetAllFiles(filePath, files);
//读取所有格式为jpg的文件
string format = ".jpg";
GetAllFormatFiles(filePath, files,format);
ofstream ofn(distAll);
int size = files.size();
ofn<<size<<endl;
for (int i = 0;i<size;i++)
{
ofn<<files[i]<<endl;
cout<< files[i] << endl;
}
ofn.close();
return 0;
}
更多推荐
所有评论(0)