向有经验的高手求教:如何处理中文目录和中文文件名?

seahust 2006-08-30 05:13:22
我在程序中用GetOpenFileName获取的文件名,其中含有中文,然后用GetFileAttributes判断是否为目录。 我还尝试将该文件名转换为unicode格式, 用GetFileAttributesW判断。结果两种方式,调用GetFileAttributes都失败了。 如果文件目录文件名中不含汉字则没有问题。
这一定是汉字的文字,可是实在找不到解决方法,请有经验的高手赐教
...全文
159 9 打赏 收藏 转发到动态 举报
写回复
用AI写文章
9 条回复
切换为时间正序
请发表友善的回复…
发表回复
lixiaosan 2006-08-30
  • 打赏
  • 举报
回复
是否路径中带有空格 ?
seahust 2006-08-30
  • 打赏
  • 举报
回复
或许,现在用了个笨办法解决了
谢谢参与,那位有根本解决问题的方法,请Mailto: seahust@sina.com
vcPlayer 2006-08-30
  • 打赏
  • 举报
回复
好像有个OEM代码页的问题哦.
Elysium 2006-08-30
  • 打赏
  • 举报
回复
是不是你设置的开发环境为Ens
Elysium 2006-08-30
  • 打赏
  • 举报
回复
怎样在目录中寻找文件

2003-4-23 12:44:24 VCTOP 阅读次数: 21600


下面的代码说明了怎样在一个给定的目录中从上到下地搜索整个目录树.本例子只将结果输出到system debug screen.

调用下面的类函数,搜索完成之后,将出现一个信息框.

void CTestView::OnSearch()
{

// szFilename is declared in the header as array of char
// look for MyFile.txt (or whatever)

strcpy(szFilename,"MyFile.txt");

// go to root directory (or to whichever directory that you wish)

_chdir("C:\\");

// search for the filename

SearchDirectory();

// announce when done

MessageBox("Done Searching");
}

函数 SearchDirectory() 在函数 OnSearch()中被调用. SearchDirectory() 然后反复回调,直到整个目录,包括子目录都被搜索.

void CTestView::SearchDirectory()
{
struct _finddata_t filestruct;
long hnd;
char buffer[_MAX_PATH];

// set _findfirst to find everthing

hnd = _findfirst("*",&filestruct);

// if handle fails, drive is empty...

if((hnd == -1)) return;

// get first entity on drive - check if it's a directory

if(::GetFileAttributes(filestruct.name) & FILE_ATTRIBUTE_DIRECTORY
&& !(::GetFileAttributes(filestruct.name) & FILE_ATTRIBUTE_HIDDEN)) {

// if so, change to that directory and recursively call SearchDirectory

if(*filestruct.name != '.') {

_chdir(filestruct.name);

SearchDirectory();

// go back up one directory level

_chdir("..");
}
}
else {

// if it's not a directory and it matches what you want...

if(!stricmp(filestruct.name,szFilename)) {

// output the filename with path to debugger

_getcwd(buffer,_MAX_PATH);
strcat(buffer,"\\");
strcat(buffer,filestruct.name);
strcat(buffer,"\r\n");
OutputDebugString(buffer);
}
}

while(!(_findnext(hnd,&filestruct))) {

if(::GetFileAttributes(filestruct.name) & FILE_ATTRIBUTE_DIRECTORY
&& !(::GetFileAttributes(filestruct.name) & FILE_ATTRIBUTE_HIDDEN)) {

if(*filestruct.name != '.') {
_chdir(filestruct.name);

SearchDirectory();

_chdir("..");
}
}
else {

if(!stricmp(filestruct.name,szFilename)) {
_getcwd(buffer,_MAX_PATH);
strcat(buffer,"\\");
strcat(buffer,filestruct.name);
strcat(buffer,"\r\n");
OutputDebugString(buffer);
}
}
}

_findclose(hnd);
}
seahust 2006-08-30
  • 打赏
  • 举报
回复
只要文件名中出现汉字,就不行
Elysium 2006-08-30
  • 打赏
  • 举报
回复
所有的还是个别的?
seahust 2006-08-30
  • 打赏
  • 举报
回复
能说明白点吗?
striking 2006-08-30
  • 打赏
  • 举报
回复
code pls

16,472

社区成员

发帖
与我相关
我的任务
社区描述
VC/MFC相关问题讨论
社区管理员
  • 基础类社区
  • Web++
  • encoderlee
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告

        VC/MFC社区版块或许是CSDN最“古老”的版块了,记忆之中,与CSDN的年龄几乎差不多。随着时间的推移,MFC技术渐渐的偏离了开发主流,若干年之后的今天,当我们面对着微软的这个经典之笔,内心充满着敬意,那些曾经的记忆,可以说代表着二十年前曾经的辉煌……
        向经典致敬,或许是老一代程序员内心里面难以释怀的感受。互联网大行其道的今天,我们期待着MFC技术能够恢复其曾经的辉煌,或许这个期待会永远成为一种“梦想”,或许一切皆有可能……
        我们希望这个版块可以很好的适配Web时代,期待更好的互联网技术能够使得MFC技术框架得以重现活力,……

试试用AI创作助手写篇文章吧