首页 新闻 会员 周边

关于c的fopen函数

0
悬赏园豆:10 [待解决问题]

对于文件名参数是中文怎么处理呢,如果用_wfopen,那它可移植性怎么处理

c++ c
zhouxinghuai的主页 zhouxinghuai | 初学一级 | 园豆:115
提问于:2013-07-20 00:07
< >
分享
所有回答(4)
0

中文名一样可以处理,只不过在非中文系统就找不到文件罢了。

地质灾害 | 园豆:262 (菜鸟二级) | 2013-07-21 20:56
0

fopen(可以处理中文名称),标准c/c++中(windows),在处理中文的时候,需要设置setlocal(LC_ALL,"chs")

 

void main()

{

   setlocal(LC_ALL,"chs");

   FILE* file = fopen("c:/中文.txt","rt");

   

}

zlt | 园豆:237 (菜鸟二级) | 2013-07-26 08:28

但是gcc(linux)好像没有_wfopen吧

支持(0) 反对(0) zhouxinghuai | 园豆:115 (初学一级) | 2013-08-03 22:45

@zhouxinghuai: 

我没有用这个函数,直接使用fopen也可以打开中文名称的文件

支持(0) 反对(0) zlt | 园豆:237 (菜鸟二级) | 2013-08-03 22:47
0

重要的不是你的文件名是中文字符,而是你传入的参数类型。

fopen 使用 char* ,_wfopen 使用 wchar_t * ,前者针对多字节,后者为UNICODE。

前者受OS和IDE的编译选项影响,后者更为通用。

建议你始终使用 UNICODE来编译程序,并且始终使用 UNICODE 版的 API。

Launcher | 园豆:45045 (高人七级) | 2013-08-02 13:39

但是gcc好像没有_wfopen吧

支持(0) 反对(0) zhouxinghuai | 园豆:115 (初学一级) | 2013-08-03 22:45

@zhouxinghuai: 我的意思就是,没有 _wfopen 不要紧,你可以自己封装一个 _wfopen,关键是在你的程序中要始终使用 UNICODE 来编写程序,你可以参照JAVA,NET中对字符串的强制约束。

支持(0) 反对(0) Launcher | 园豆:45045 (高人七级) | 2013-08-05 09:17
0

至于提到的:setlocal(LC_ALL,"chs");

即使最后恢复了,期间也有副作用。

glimix | 园豆:154 (初学一级) | 2014-07-11 12:30
清除回答草稿
   您需要登录以后才能回答,未注册用户请先注册