如何检查文件是否属于某种类型?
我试图这样做:
if(strcmp(filename, "*.txt") == 0){
// do something
{
但不幸的是,这不起作用。
我知道我不能在strcmp中使用 * 。 那么如何将我的字符串与特定模式进行比较呢?
例如:
if filename is ***.***.txt
do something
答案 0 :(得分:2)
你可以试试这个。
int len = strlen(filename);
if (len < 4) {
printf("Filename too short\n");
exit(1);
}
const char *extension = &filename[len-4];
if strcmp(extension, ".txt") == 0
答案 1 :(得分:2)
您可以使用strrchr
搜索.
的最后一次出现。如果找到,请针对完全字符串.txt
进行测试:
ptr = strrchr (filename, '.');
if (ptr && strcmp(ptr, ".txt") == 0) {
// do something
如果完整路径的文件名部分不包含扩展名但整个路径都没有(然后strcmp
不返回0
),或者没有,那么这甚至会失败在整个路径中完全停止(然后strrchr
返回NULL
)。
我更喜欢这种方法而不是手动计算扩展的长度,因为它可以在不调整文件扩展名的任何长度的情况下工作。
请注意,strcmp
严格区分大小写。如果您的本地图书馆有stricmp
或strcasecmp
,那么这可能是一个更安全的选择。 (stricmp
仅限Microsoft,strcasecmp
更为标准Posix equivalent。)
答案 2 :(得分:1)
我会使用sscanf()
。像这样:
int length = 0;
sscanf( string, "%*[^ \n\r\t.].txt%n", &length );
if ( length >= 4 )
{
do_something();
}
空格字符列表可能不完整,但可能适合您。
答案 3 :(得分:0)
有一个功能完全符合您的要求,没有任何技巧。
它被称为fnmatch
。
用法示例:
int check_if_text( char *file_name )
{
char *file_pattern = "*.txt";
if ( fnmatch( file_pattern, file_name, 0 ) == 0 ) {
return EXIT_SUCCESS;
}
return EXIT_FAILURE;
}
要使用此功能,您需要#include <fnmatch.h>