LinuxSir.cn,穿越时空的Linuxsir!

 找回密码
 注册
搜索
热搜: shell linux mysql
查看: 1295|回复: 2

文件名特殊字符过滤问题!

[复制链接]
发表于 2007-12-14 10:11:53 | 显示全部楼层 |阅读模式
求帮助:
用QT 写了一个文件过滤功能,虽然能够实现根据文件的扩展名来过滤大部分的普通文件,但是如果,文件名中含有特殊字符,却获取不到文件名了:
代码如下,我测试的特殊文件名称中主要含有以下字符:
Ⅳ々~「ⅠⅡⅢⅥⅤ|∷

total = scandir(dir,&namelist ,0,alphasort);

    if( total < 0 )
    {
        perror(“scandir”);
        return ;
    }
    else
    {
        for( j = 2; j < total; j++)
        {
            
            QString filename;
            filename = namelist[j]->d_name;
            memset( Absfilename, 0, sizeof( Absfilename ) );
            sprintf( Absfilename, "%s/%s", dir, namelist[j]->d_name) ;
            stat( Absfilename, &buf );
            int FileType;

            if ( S_ISREG( buf.st_mode ) == 1 )
            {
                FileType = filterFiles( filename );

                if ( 1==FileType )
                {
                        Boxlist[listnum++ ] =  Absfilename ;
                        listBox1->insertItem(*pfilm, trUtf8( namelist[j]->d_name) );
                }
        }
文件过滤函数部分代码如下:,
static char *videopattern[] = { "*.AVI", "*.VOB", "*.RM", "*.RMVB"};
int videonum = sizeof(videopattern)/sizeof( char* );

int TopWindow::filterFiles( QString filename )
{
        int i ;

        for( i = 0 ; i < videonum; ++i )
        {
                if( fnmatch( videopattern, trUtf8( filename.upper() ), 0 ) == 0 )
                {
                        return 1; //视频格式
                }
        }
}


不知道为什么特殊字符的却过滤不出来,如:   『憨豆先生』Ⅲ.rmvb 就不行...

希望有做过文件过滤的大侠指点下小弟.在此不胜感激..!
发表于 2007-12-14 11:45:11 | 显示全部楼层
setlocale需要正确调用,保证locale跟文件的编码一致。
回复 支持 反对

使用道具 举报

 楼主| 发表于 2007-12-14 12:10:41 | 显示全部楼层
经过重新测试及运行.
scandir 对于中文名称,亦能检测中文名称,出现此问题的原因是由于QT 对中文名称支持方面需要用函数trUtf8() 将文件名称变为UTF8编码,
不然为乱码:
休正后代码为:
      filename = namelist[j]->d_name;
改为:
      filename = trUtf8( namelist[j]->d_name );
问题即可解决.谢谢大家的指点.非常感谢.!
回复 支持 反对

使用道具 举报

您需要登录后才可以回帖 登录 | 注册

本版积分规则

快速回复 返回顶部 返回列表