是否必须先获得所有文件的文件名,如何实现?有什么现成的函数吗?
如果该目录下还有子目录,对上面的问题会造成什么影响?
谢谢。
3 个解决方案
#1
有。TC中findfirst, findnext。
#2
有。TC中findfirst, findnext。
VC中FindFirstFile, FindNextFile。
#include "windows.h"
int
main(int argc, char *argv[])
{
WIN32_FIND_DATA FindFileData;
HANDLE hFind;
printf ("Target file is %s.\n", argv[1]);
hFind = FindFirstFile(argv[1], &FindFileData);
if (hFind == INVALID_HANDLE_VALUE) {
printf ("Invalid File Handle. Get Last Error reports %d\n", GetLastError ());
} else {
printf ("The first file found is %s\n", FindFileData.cFileName);
FindClose(hFind);
}
return (0);
}
VC中FindFirstFile, FindNextFile。
#include "windows.h"
int
main(int argc, char *argv[])
{
WIN32_FIND_DATA FindFileData;
HANDLE hFind;
printf ("Target file is %s.\n", argv[1]);
hFind = FindFirstFile(argv[1], &FindFileData);
if (hFind == INVALID_HANDLE_VALUE) {
printf ("Invalid File Handle. Get Last Error reports %d\n", GetLastError ());
} else {
printf ("The first file found is %s\n", FindFileData.cFileName);
FindClose(hFind);
}
return (0);
}
#3
摘自《The GNU C Library Reference Manual Volume 1》:
第14章 文件系统接口
14.2.4 列出目录的简单程序
这里的例子打印出当前工作目录下所有的文件:
#include <stddef.h>
#include <stdio.h>
#include <sys/types.h>
#include <dirent.h>
int main(void)
{
DIR* dp;
struct dirent* ep;
dp = opendir("./");
if (dp != NULL)
{
while (ep = readdir(dp))
puts(ep->d_name);
(void) closedir(dp);
}
else
puts("Couldn't open the directory.");
return 0;
}
其中,
1)DIR 目录流(directory stream)类型;
2)struct dirent 包含以下内容:
char d_name[] 文件名
ino_t d_fileno 文件序列号
unsigned char d_namelen 文件名长度
unsigned char d_type 文件类型
文件类型可以是:DT_UNKNOWN 不明类型
DT_REG 普通文件
DT_DIR 目录(to marmoset:这是你需要知道的)
等;
等;
3)DIR* opendir(const char* dirname)
打开并返回一个名为dirname的用于读取操作的目录流;
4)struct dirent* readdir(DIR* dirstream)
从目录中读取下一条入口(entry),返回一个包含文件信息的dirent结构;
5)int closedir(DIR* dirstream)
关闭名为dirstream的目录流;
6)puts()函数就不用我介绍了吧。
这是Linux/Unix下的情况;相信dos,windows下会更方便,无奈我没有这方面的资料(你可以自己多看看VC、BC庞大的帮助系统,应该是可以找到相应函数和结构的。这里我给出的信息,你可以当作参考,大概知道应该找些什么方面的帮助.)。
希望对你有帮助。
第14章 文件系统接口
14.2.4 列出目录的简单程序
这里的例子打印出当前工作目录下所有的文件:
#include <stddef.h>
#include <stdio.h>
#include <sys/types.h>
#include <dirent.h>
int main(void)
{
DIR* dp;
struct dirent* ep;
dp = opendir("./");
if (dp != NULL)
{
while (ep = readdir(dp))
puts(ep->d_name);
(void) closedir(dp);
}
else
puts("Couldn't open the directory.");
return 0;
}
其中,
1)DIR 目录流(directory stream)类型;
2)struct dirent 包含以下内容:
char d_name[] 文件名
ino_t d_fileno 文件序列号
unsigned char d_namelen 文件名长度
unsigned char d_type 文件类型
文件类型可以是:DT_UNKNOWN 不明类型
DT_REG 普通文件
DT_DIR 目录(to marmoset:这是你需要知道的)
等;
等;
3)DIR* opendir(const char* dirname)
打开并返回一个名为dirname的用于读取操作的目录流;
4)struct dirent* readdir(DIR* dirstream)
从目录中读取下一条入口(entry),返回一个包含文件信息的dirent结构;
5)int closedir(DIR* dirstream)
关闭名为dirstream的目录流;
6)puts()函数就不用我介绍了吧。
这是Linux/Unix下的情况;相信dos,windows下会更方便,无奈我没有这方面的资料(你可以自己多看看VC、BC庞大的帮助系统,应该是可以找到相应函数和结构的。这里我给出的信息,你可以当作参考,大概知道应该找些什么方面的帮助.)。
希望对你有帮助。
#1
有。TC中findfirst, findnext。
#2
有。TC中findfirst, findnext。
VC中FindFirstFile, FindNextFile。
#include "windows.h"
int
main(int argc, char *argv[])
{
WIN32_FIND_DATA FindFileData;
HANDLE hFind;
printf ("Target file is %s.\n", argv[1]);
hFind = FindFirstFile(argv[1], &FindFileData);
if (hFind == INVALID_HANDLE_VALUE) {
printf ("Invalid File Handle. Get Last Error reports %d\n", GetLastError ());
} else {
printf ("The first file found is %s\n", FindFileData.cFileName);
FindClose(hFind);
}
return (0);
}
VC中FindFirstFile, FindNextFile。
#include "windows.h"
int
main(int argc, char *argv[])
{
WIN32_FIND_DATA FindFileData;
HANDLE hFind;
printf ("Target file is %s.\n", argv[1]);
hFind = FindFirstFile(argv[1], &FindFileData);
if (hFind == INVALID_HANDLE_VALUE) {
printf ("Invalid File Handle. Get Last Error reports %d\n", GetLastError ());
} else {
printf ("The first file found is %s\n", FindFileData.cFileName);
FindClose(hFind);
}
return (0);
}
#3
摘自《The GNU C Library Reference Manual Volume 1》:
第14章 文件系统接口
14.2.4 列出目录的简单程序
这里的例子打印出当前工作目录下所有的文件:
#include <stddef.h>
#include <stdio.h>
#include <sys/types.h>
#include <dirent.h>
int main(void)
{
DIR* dp;
struct dirent* ep;
dp = opendir("./");
if (dp != NULL)
{
while (ep = readdir(dp))
puts(ep->d_name);
(void) closedir(dp);
}
else
puts("Couldn't open the directory.");
return 0;
}
其中,
1)DIR 目录流(directory stream)类型;
2)struct dirent 包含以下内容:
char d_name[] 文件名
ino_t d_fileno 文件序列号
unsigned char d_namelen 文件名长度
unsigned char d_type 文件类型
文件类型可以是:DT_UNKNOWN 不明类型
DT_REG 普通文件
DT_DIR 目录(to marmoset:这是你需要知道的)
等;
等;
3)DIR* opendir(const char* dirname)
打开并返回一个名为dirname的用于读取操作的目录流;
4)struct dirent* readdir(DIR* dirstream)
从目录中读取下一条入口(entry),返回一个包含文件信息的dirent结构;
5)int closedir(DIR* dirstream)
关闭名为dirstream的目录流;
6)puts()函数就不用我介绍了吧。
这是Linux/Unix下的情况;相信dos,windows下会更方便,无奈我没有这方面的资料(你可以自己多看看VC、BC庞大的帮助系统,应该是可以找到相应函数和结构的。这里我给出的信息,你可以当作参考,大概知道应该找些什么方面的帮助.)。
希望对你有帮助。
第14章 文件系统接口
14.2.4 列出目录的简单程序
这里的例子打印出当前工作目录下所有的文件:
#include <stddef.h>
#include <stdio.h>
#include <sys/types.h>
#include <dirent.h>
int main(void)
{
DIR* dp;
struct dirent* ep;
dp = opendir("./");
if (dp != NULL)
{
while (ep = readdir(dp))
puts(ep->d_name);
(void) closedir(dp);
}
else
puts("Couldn't open the directory.");
return 0;
}
其中,
1)DIR 目录流(directory stream)类型;
2)struct dirent 包含以下内容:
char d_name[] 文件名
ino_t d_fileno 文件序列号
unsigned char d_namelen 文件名长度
unsigned char d_type 文件类型
文件类型可以是:DT_UNKNOWN 不明类型
DT_REG 普通文件
DT_DIR 目录(to marmoset:这是你需要知道的)
等;
等;
3)DIR* opendir(const char* dirname)
打开并返回一个名为dirname的用于读取操作的目录流;
4)struct dirent* readdir(DIR* dirstream)
从目录中读取下一条入口(entry),返回一个包含文件信息的dirent结构;
5)int closedir(DIR* dirstream)
关闭名为dirstream的目录流;
6)puts()函数就不用我介绍了吧。
这是Linux/Unix下的情况;相信dos,windows下会更方便,无奈我没有这方面的资料(你可以自己多看看VC、BC庞大的帮助系统,应该是可以找到相应函数和结构的。这里我给出的信息,你可以当作参考,大概知道应该找些什么方面的帮助.)。
希望对你有帮助。