用C或C++怎么打开一个文件夹,并读取文件夹下的多个文件(不知道有多少个,是什么格式的),求高手指点
用C或C++怎么打开一个文件夹,并读取文件夹下的多个文件(不知道有多少个,是什么格式的),用哪些标准函数来实现?我查了一些资料,可以用链表来实现,但在里面提到了DIR,d...
用C或C++怎么打开一个文件夹,并读取文件夹下的多个文件(不知道有多少个,是什么格式的),用哪些标准函数来实现?
我查了一些资料,可以用链表来实现,但在里面提到了DIR,dirent。我用vs2010,但我输入这些关键字的时候,并没有变色,我也包含了头文件#include <direct.h>,#inlcude <stdio.h>,#include <string.h>.这是为什么,是否linux和windows不一样。
希望知道要用到哪些C或C++的标准库函数 展开
我查了一些资料,可以用链表来实现,但在里面提到了DIR,dirent。我用vs2010,但我输入这些关键字的时候,并没有变色,我也包含了头文件#include <direct.h>,#inlcude <stdio.h>,#include <string.h>.这是为什么,是否linux和windows不一样。
希望知道要用到哪些C或C++的标准库函数 展开
4个回答
展开全部
这个在linux和windows下的API是不一样的,推荐使用boost库来解决兼容性问题
这是一个boost的例子,把文件夹中的文件列表排序并输出
int main(int argc, char* argv[])
{
path p (argv[1]); // p reads clearer than argv[1] in the following code
try
{
if (exists(p)) // does p actually exist?
{
if (is_regular_file(p)) // is p a regular file?
cout << p << " size is " << file_size(p) << '\n';
else if (is_directory(p)) // is p a directory?
{
cout << p << " is a directory containing:\n";
typedef vector<path> vec; // store paths,
vec v; // so we can sort them later
copy(directory_iterator(p), directory_iterator(), back_inserter(v));
sort(v.begin(), v.end()); // sort, since directory iteration
// is not ordered on some file systems
for (vec::const_iterator it (v.begin()); it != v.end(); ++it)
{
cout << " " << *it << '\n';
}
}
else
cout << p << " exists, but is neither a regular file nor a directory\n";
}
else
cout << p << " does not exist\n";
}
catch (const filesystem_error& ex)
{
cout << ex.what() << '\n';
}
return 0;
}
这是一个boost的例子,把文件夹中的文件列表排序并输出
int main(int argc, char* argv[])
{
path p (argv[1]); // p reads clearer than argv[1] in the following code
try
{
if (exists(p)) // does p actually exist?
{
if (is_regular_file(p)) // is p a regular file?
cout << p << " size is " << file_size(p) << '\n';
else if (is_directory(p)) // is p a directory?
{
cout << p << " is a directory containing:\n";
typedef vector<path> vec; // store paths,
vec v; // so we can sort them later
copy(directory_iterator(p), directory_iterator(), back_inserter(v));
sort(v.begin(), v.end()); // sort, since directory iteration
// is not ordered on some file systems
for (vec::const_iterator it (v.begin()); it != v.end(); ++it)
{
cout << " " << *it << '\n';
}
}
else
cout << p << " exists, but is neither a regular file nor a directory\n";
}
else
cout << p << " does not exist\n";
}
catch (const filesystem_error& ex)
{
cout << ex.what() << '\n';
}
return 0;
}
参考资料: http://www.boost.org/doc/libs/1_51_0/libs/filesystem/doc/tutorial.html#Directory-iteration
展开全部
选取多个文件方法:
1、ctrl+a 全选,再按ctrl+c 复制,CTRL+ V粘贴
2\按住CTRL,在用鼠标点击,要选的文件。
1、ctrl+a 全选,再按ctrl+c 复制,CTRL+ V粘贴
2\按住CTRL,在用鼠标点击,要选的文件。
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
展开全部
void FileSearch(CString root)
{ // root 为目录名
CFileFind ff;
CString FilePath;
if (root.Right(1)!="/")
{
root+="/";
}
root+="*.*";
BOOL res=ff.FindFile(root);
while (res)
{
res=ff.FindNextFile();
FilePath=ff.GetFilePath();
if (ff.IsDirectory() && !ff.IsDots())// 找到的是文件夹
{
FileSearch(FilePath);// 递归
}
else if (!ff.IsDirectory() && !ff.IsDots())// 找到的是文件
{
m_ff+=FilePath;
m_ff+=" ";
}
}
}
{ // root 为目录名
CFileFind ff;
CString FilePath;
if (root.Right(1)!="/")
{
root+="/";
}
root+="*.*";
BOOL res=ff.FindFile(root);
while (res)
{
res=ff.FindNextFile();
FilePath=ff.GetFilePath();
if (ff.IsDirectory() && !ff.IsDots())// 找到的是文件夹
{
FileSearch(FilePath);// 递归
}
else if (!ff.IsDirectory() && !ff.IsDots())// 找到的是文件
{
m_ff+=FilePath;
m_ff+=" ";
}
}
}
追问
我要用纯的C/C++,不用MFC
本回答被提问者采纳
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
展开全部
如果你CFile类,那么就会有一个Seek()方法,你要处理的文件的位置,然后你就可以file.Seek(0,的CFile ::端)。 FILE * seek()方法类似的使用。
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
推荐律师服务:
若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询