于是想问:
有什么函数或方法可以直接判断它是文件?还是文件夹?
16 个解决方案
#1
BOOL PathIsDirectory( LPCTSTR pszPath
);
Verifies that a path is a valid directory。
);
Verifies that a path is a valid directory。
#2
贴个linux的.
#include <sys/types.h>
#include <sys/stat.h>
#include <time.h>
#include <stdio.h>
#include <stdlib.h>
int
main(int argc, char *argv[])
{
struct stat sb;
if (argc != 2) {
fprintf(stderr, "Usage: %s <pathname>\n", argv[0]);
exit(EXIT_FAILURE);
}
if (stat(argv[1], &sb) == -1) {
perror("stat");
exit(EXIT_FAILURE);
}
printf("File type: ");
switch (sb.st_mode & S_IFMT) {
case S_IFBLK: printf("block device\n"); break;
case S_IFCHR: printf("character device\n"); break;
case S_IFDIR: printf("directory\n"); break;
case S_IFIFO: printf("FIFO/pipe\n"); break;
case S_IFLNK: printf("symlink\n"); break;
case S_IFREG: printf("regular file\n"); break;
case S_IFSOCK: printf("socket\n"); break;
default: printf("unknown?\n"); break;
}
exit(EXIT_SUCCESS);
}
#3
int stat(const char *restrict pathname, struct stat *restrict buf);
struct stat {
mode_t st_mode; //文件对应的模式,文件,目录等
ino_t st_ino; //inode节点号
dev_t st_dev; //设备号码
dev_t st_rdev; //特殊设备号码
nlink_t st_nlink; //文件的连接数
uid_t st_uid; //文件所有者
gid_t st_gid; //文件所有者对应的组
off_t st_size; //普通文件,对应的文件字节数
time_t st_atime; //文件最后被访问的时间
time_t st_mtime; //文件内容最后被修改的时间
time_t st_ctime; //文件状态改变时间
blksize_t st_blksize; //文件内容对应的块大小
blkcnt_t st_blocks; //伟建内容对应的块数量
};
宏作用:
S_ISREG()测试是否为普通文件
S_ISDIR()测试是否为目录文件
例子:
#include <stdio.h>
#include <stdlib.h>
#include <sys/types.h>
#include <sys/stat.h>
#include <fcntl.h>
#include <unistd.h>
int main(int argc, char * argv[])
{
int i;
struct stat buf;
char *ptr;
for(i=1; i< argc; i++)
{
printf("%s: ", argv[i]);
if(lstat(argv[i],&buf)<0)
{
printf("lstat error.");
continue;
}
if(S_ISREG(buf.st_mode)) ptr = "regular";
else if(S_ISDIR(buf.st_mode)) ptr = "directory";
else if(S_ISCHR(buf.st_mode)) ptr = "char special";
else if(S_ISBLK(buf.st_mode)) ptr = "block special";
else if(S_ISFIFO(buf.st_mode)) ptr = "fifo";
else ptr = "Others";
printf(" %s\n",ptr );
}
return 0;
}
struct stat {
mode_t st_mode; //文件对应的模式,文件,目录等
ino_t st_ino; //inode节点号
dev_t st_dev; //设备号码
dev_t st_rdev; //特殊设备号码
nlink_t st_nlink; //文件的连接数
uid_t st_uid; //文件所有者
gid_t st_gid; //文件所有者对应的组
off_t st_size; //普通文件,对应的文件字节数
time_t st_atime; //文件最后被访问的时间
time_t st_mtime; //文件内容最后被修改的时间
time_t st_ctime; //文件状态改变时间
blksize_t st_blksize; //文件内容对应的块大小
blkcnt_t st_blocks; //伟建内容对应的块数量
};
宏作用:
S_ISREG()测试是否为普通文件
S_ISDIR()测试是否为目录文件
例子:
#include <stdio.h>
#include <stdlib.h>
#include <sys/types.h>
#include <sys/stat.h>
#include <fcntl.h>
#include <unistd.h>
int main(int argc, char * argv[])
{
int i;
struct stat buf;
char *ptr;
for(i=1; i< argc; i++)
{
printf("%s: ", argv[i]);
if(lstat(argv[i],&buf)<0)
{
printf("lstat error.");
continue;
}
if(S_ISREG(buf.st_mode)) ptr = "regular";
else if(S_ISDIR(buf.st_mode)) ptr = "directory";
else if(S_ISCHR(buf.st_mode)) ptr = "char special";
else if(S_ISBLK(buf.st_mode)) ptr = "block special";
else if(S_ISFIFO(buf.st_mode)) ptr = "fifo";
else ptr = "Others";
printf(" %s\n",ptr );
}
return 0;
}
#4
++1,没试过!
#5
++
不过得加上这些
#pragma comment(lib, "shlwapi.lib")
#include <shlwapi.h>
#6
system("dir /a-d /b /s c:\\*.* >d:\\allfiles.txt");
//d:\\allfiles.txt文件中内容为c:上所有文件名
system("dir /ad /b /s c:\\*.* >d:\\alldirs.txt");
//d:\\alldirs.txt文件中内容为c:上所有文件夹名
//d:\\allfiles.txt文件中内容为c:上所有文件名
system("dir /ad /b /s c:\\*.* >d:\\alldirs.txt");
//d:\\alldirs.txt文件中内容为c:上所有文件夹名
#7
我想用这个思路,是否可行?
有它们中,判断是否存在特有的属性,如:子目录
因为文件夹是具有子目录的,文件的话就没有“子目录”这个属性。
用这样区分开。
有它们中,判断是否存在特有的属性,如:子目录
因为文件夹是具有子目录的,文件的话就没有“子目录”这个属性。
用这样区分开。
#8
除了子目录,还有修改时间等。
#9
shell 命令就很好判断啦
#10
路过学习下~~
判断一个路径是否是文件。
在文件夹路径存储的时候可以在最后加上"\",用来区别文件(没有拓展名)和文件夹路径的区别。
例如:"C:\Users\"这是个文件夹
"C:\Users"这是个没有拓展名的文件
判断一个路径是否是文件。
在文件夹路径存储的时候可以在最后加上"\",用来区别文件(没有拓展名)和文件夹路径的区别。
例如:"C:\Users\"这是个文件夹
"C:\Users"这是个没有拓展名的文件
#11
如此:
用stat函数就比较好。
#12
当然可行,比如
The st_mode entry contains a set of flags describing the file. The flag definitions are also included in <sys/types.h>; we need only the part that deals with file type:
#define S_IFMT 0160000 /* type of file: */
#define S_IFDIR 0040000 /* directory */
#define S_IFCHR 0020000 /* character special */
#define S_IFBLK 0060000 /* block special */
#define S_IFREG 0010000 /* regular */
/* ... */
但这是unix 下的,别的os 的不一定一样
简单一点,利用 os 提供的 api
#13
这样写貌似也可以……
当然,这是测试文件是否存在的代码……文件夹不是文件……
当然,这是测试文件是否存在的代码……文件夹不是文件……
#include <stdio.h>
int main(int argc, char **argv)
{
FILE *fp = NULL;
const char name[] = "test";
/* 鉴于Windows下文件和文件夹不能同名,试试这段代码 */
if (NULL == (fp = fopen(name, "rb")))
{
printf("Not File!\n");
}
else
{
printf("Is FIle!");
fclose(fp);
}
return 0;
}
#14
这个方法比较简单.
#15
真的高手如云,非常石感谢大家的帮助。
#16
楼上的API不错。
如果纯C编程的话,可以试着当成文件打开,如果打不开就是文件夹,这是个笨办法。
如果纯C编程的话,可以试着当成文件打开,如果打不开就是文件夹,这是个笨办法。
#1
BOOL PathIsDirectory( LPCTSTR pszPath
);
Verifies that a path is a valid directory。
);
Verifies that a path is a valid directory。
#2
贴个linux的.
#include <sys/types.h>
#include <sys/stat.h>
#include <time.h>
#include <stdio.h>
#include <stdlib.h>
int
main(int argc, char *argv[])
{
struct stat sb;
if (argc != 2) {
fprintf(stderr, "Usage: %s <pathname>\n", argv[0]);
exit(EXIT_FAILURE);
}
if (stat(argv[1], &sb) == -1) {
perror("stat");
exit(EXIT_FAILURE);
}
printf("File type: ");
switch (sb.st_mode & S_IFMT) {
case S_IFBLK: printf("block device\n"); break;
case S_IFCHR: printf("character device\n"); break;
case S_IFDIR: printf("directory\n"); break;
case S_IFIFO: printf("FIFO/pipe\n"); break;
case S_IFLNK: printf("symlink\n"); break;
case S_IFREG: printf("regular file\n"); break;
case S_IFSOCK: printf("socket\n"); break;
default: printf("unknown?\n"); break;
}
exit(EXIT_SUCCESS);
}
#3
int stat(const char *restrict pathname, struct stat *restrict buf);
struct stat {
mode_t st_mode; //文件对应的模式,文件,目录等
ino_t st_ino; //inode节点号
dev_t st_dev; //设备号码
dev_t st_rdev; //特殊设备号码
nlink_t st_nlink; //文件的连接数
uid_t st_uid; //文件所有者
gid_t st_gid; //文件所有者对应的组
off_t st_size; //普通文件,对应的文件字节数
time_t st_atime; //文件最后被访问的时间
time_t st_mtime; //文件内容最后被修改的时间
time_t st_ctime; //文件状态改变时间
blksize_t st_blksize; //文件内容对应的块大小
blkcnt_t st_blocks; //伟建内容对应的块数量
};
宏作用:
S_ISREG()测试是否为普通文件
S_ISDIR()测试是否为目录文件
例子:
#include <stdio.h>
#include <stdlib.h>
#include <sys/types.h>
#include <sys/stat.h>
#include <fcntl.h>
#include <unistd.h>
int main(int argc, char * argv[])
{
int i;
struct stat buf;
char *ptr;
for(i=1; i< argc; i++)
{
printf("%s: ", argv[i]);
if(lstat(argv[i],&buf)<0)
{
printf("lstat error.");
continue;
}
if(S_ISREG(buf.st_mode)) ptr = "regular";
else if(S_ISDIR(buf.st_mode)) ptr = "directory";
else if(S_ISCHR(buf.st_mode)) ptr = "char special";
else if(S_ISBLK(buf.st_mode)) ptr = "block special";
else if(S_ISFIFO(buf.st_mode)) ptr = "fifo";
else ptr = "Others";
printf(" %s\n",ptr );
}
return 0;
}
struct stat {
mode_t st_mode; //文件对应的模式,文件,目录等
ino_t st_ino; //inode节点号
dev_t st_dev; //设备号码
dev_t st_rdev; //特殊设备号码
nlink_t st_nlink; //文件的连接数
uid_t st_uid; //文件所有者
gid_t st_gid; //文件所有者对应的组
off_t st_size; //普通文件,对应的文件字节数
time_t st_atime; //文件最后被访问的时间
time_t st_mtime; //文件内容最后被修改的时间
time_t st_ctime; //文件状态改变时间
blksize_t st_blksize; //文件内容对应的块大小
blkcnt_t st_blocks; //伟建内容对应的块数量
};
宏作用:
S_ISREG()测试是否为普通文件
S_ISDIR()测试是否为目录文件
例子:
#include <stdio.h>
#include <stdlib.h>
#include <sys/types.h>
#include <sys/stat.h>
#include <fcntl.h>
#include <unistd.h>
int main(int argc, char * argv[])
{
int i;
struct stat buf;
char *ptr;
for(i=1; i< argc; i++)
{
printf("%s: ", argv[i]);
if(lstat(argv[i],&buf)<0)
{
printf("lstat error.");
continue;
}
if(S_ISREG(buf.st_mode)) ptr = "regular";
else if(S_ISDIR(buf.st_mode)) ptr = "directory";
else if(S_ISCHR(buf.st_mode)) ptr = "char special";
else if(S_ISBLK(buf.st_mode)) ptr = "block special";
else if(S_ISFIFO(buf.st_mode)) ptr = "fifo";
else ptr = "Others";
printf(" %s\n",ptr );
}
return 0;
}
#4
++1,没试过!
#5
++
不过得加上这些
#pragma comment(lib, "shlwapi.lib")
#include <shlwapi.h>
#6
system("dir /a-d /b /s c:\\*.* >d:\\allfiles.txt");
//d:\\allfiles.txt文件中内容为c:上所有文件名
system("dir /ad /b /s c:\\*.* >d:\\alldirs.txt");
//d:\\alldirs.txt文件中内容为c:上所有文件夹名
//d:\\allfiles.txt文件中内容为c:上所有文件名
system("dir /ad /b /s c:\\*.* >d:\\alldirs.txt");
//d:\\alldirs.txt文件中内容为c:上所有文件夹名
#7
我想用这个思路,是否可行?
有它们中,判断是否存在特有的属性,如:子目录
因为文件夹是具有子目录的,文件的话就没有“子目录”这个属性。
用这样区分开。
有它们中,判断是否存在特有的属性,如:子目录
因为文件夹是具有子目录的,文件的话就没有“子目录”这个属性。
用这样区分开。
#8
除了子目录,还有修改时间等。
#9
shell 命令就很好判断啦
#10
路过学习下~~
判断一个路径是否是文件。
在文件夹路径存储的时候可以在最后加上"\",用来区别文件(没有拓展名)和文件夹路径的区别。
例如:"C:\Users\"这是个文件夹
"C:\Users"这是个没有拓展名的文件
判断一个路径是否是文件。
在文件夹路径存储的时候可以在最后加上"\",用来区别文件(没有拓展名)和文件夹路径的区别。
例如:"C:\Users\"这是个文件夹
"C:\Users"这是个没有拓展名的文件
#11
如此:
用stat函数就比较好。
#12
当然可行,比如
The st_mode entry contains a set of flags describing the file. The flag definitions are also included in <sys/types.h>; we need only the part that deals with file type:
#define S_IFMT 0160000 /* type of file: */
#define S_IFDIR 0040000 /* directory */
#define S_IFCHR 0020000 /* character special */
#define S_IFBLK 0060000 /* block special */
#define S_IFREG 0010000 /* regular */
/* ... */
但这是unix 下的,别的os 的不一定一样
简单一点,利用 os 提供的 api
#13
这样写貌似也可以……
当然,这是测试文件是否存在的代码……文件夹不是文件……
当然,这是测试文件是否存在的代码……文件夹不是文件……
#include <stdio.h>
int main(int argc, char **argv)
{
FILE *fp = NULL;
const char name[] = "test";
/* 鉴于Windows下文件和文件夹不能同名,试试这段代码 */
if (NULL == (fp = fopen(name, "rb")))
{
printf("Not File!\n");
}
else
{
printf("Is FIle!");
fclose(fp);
}
return 0;
}
#14
这个方法比较简单.
#15
真的高手如云,非常石感谢大家的帮助。
#16
楼上的API不错。
如果纯C编程的话,可以试着当成文件打开,如果打不开就是文件夹,这是个笨办法。
如果纯C编程的话,可以试着当成文件打开,如果打不开就是文件夹,这是个笨办法。