fopen打开文件失败的问题

fopen打开带中文路径或含中文名称的文件失败。

解决这个问题有两个方法:一是改用_wfopen,这个函数接受两个宽字符类型,函数原型如下:

FILE* _wfopen(const wchar_t* filename, const wchar_t* mode);

参数一表示文件名,参数二表示打开模式,返回文件描述符

第二种方法还是用fopen,这种方式文件名称编码需要与系统保持一致。

fopen是C标准库的一个函数,函数内部是系统调用。Windows中调用CreateFile;Linux中调用open。

Linux的系统编码为UTF-8,程序中统一UTF-8编码就可以正常打开文件,中文乱码问题也能解决。

Windows的系统编码为GBK,如果文件名称是Unicode编码,那你在调用fopen前就必须要先把文件名称编码转为GBK,否则就打开失败。

另外在调用fwrite写入文件的时候,也要确保写入的字符编码和系统编码一致,否则也会出现乱码。

原文地址:https://www.cnblogs.com/zhugaopeng/p/9090980.html

时间: 2024-10-15 23:14:34

fopen打开文件失败的问题的相关文章

fopen打开文件失败原因分析

场景说明: 今天同事说,在已有的工具代码中,无法使用fopen打开文件,然后走过去进行协助.但是在解决问题的时候,已经先入为主的认为是:文件路径出现了字符转义的问题,根本没有想到要打印出当前无法获取到文件句柄的错误,是否是文件路径不存在.所以一开始就是将\替换为/,结果可想而知,没有任何的作用.然后替换为\\,还是不行.没有理由的,一直认为. 回去单独写最简单的测试程序,没有问题.怀疑是Unicode编码的问题,也排除了.这时候就开始百度fopen失败的原因获取.刚开始的时候准备使用GetLas

由打开文件失败引发的思考

笔者的某个目录下面有两千个c文件需要处理,为了快速实现,写了下面的代码去打开: 1 #include <stdio.h> 2 #include <string.h> 3 4 int main(void) 5 { 6    int i = 0; 7    FILE * fp = NULL; 8    char filename[10] = {0,}; 9 10    printf("Hello!\n"); 11 12    for(i=0;i<8192;i+

Qt、Vc下用fopen打开中文名字的文件

在做一个Qt项目的时候,完成上传文件时,通过fopen打开文件用来读时发现fopen不能打开中文的文件名,自己在网查找一下,解决方法如下 参考:http://weidaohang.org/wangluo/h/index.php?q=aHR0cDovL3d3dy5qYjUxLm5ldC9hcnRpY2xlLzUxOTY2Lmh0bQ%3D%3D 代码如下: ? 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 boolUTF8ToUnicode(

剖析ifstream打开含中文路径名文件失败的原因

http://blog.csdn.net/yukin_xue/article/details/7543423 最近写程序的时候遇到了使用ifstream打开含中文路径文件时失败的问题,在网上翻了一下,发现这是一个普遍遇到的问题,在很多人的博文中也都给出了一些解决技巧,但大多是转载的东西,很少对这个问题引发的原因有一个清晰.全面的解释.因此,我觉得有必要对该问题引发的原因作一个详细的剖析,希望对遇到同样问题的朋友们能有所帮助. 首先,用一个简单的例子来重现一下我所遇到的问题: (1)在VS2008

打开文件和关闭文件

1 打开文件 在对文件进行读.写操作之前,首先要解决的问题是如何把程序中要读.写的文件与磁盘上实际的数据文件联系起来.在 C 语言中这并不困难,只需调用 C 语言提供的库函数 fopen “打开”文件就可实现这些联系.fopen 函数的一般调用形式为: fopen(文件名,文件使用方式); 函数返回一个指向 FILE 类型的指针.例如: FILE *fp; fp = fopen("file_a", "r"); fopen 函数调用中有两个字符串作为参数.第一个字符串

打开文件open()函数的使用方法详解--C语言函数

头文件:#include <sys/types.h>    #include <sys/stat.h>    #include <fcntl.h> 定义函数: int open(const char * pathname, int flags); int open(const char * pathname, int flags, mode_t mode); 函数说明: 参数 pathname 指向欲打开的文件路径字符串. 下列是参数flags 所能使用的旗标: O_R

【mfc】使用系统文件对话框打开文件与保存文件、利用StdAfx.h设置全局变量

在<[mfc]利用文件的读写,theApp全局变量来现实登录帐号管理系统>(点击打开链接)中,虽然也使用到文件的打开与保存,但这是在用户打开与关闭对话框的时候就自动进行的.现在设置一个"打开"按钮与一个"保存"按钮,可以让用户自由选择保存的文件的位置,输入文件名,但是,保存的文件格式只能是我们指定的.ifo,因为以后打开文件,我们只接受.ifo的打开.本文亦是<[mfc]不同对话框之间互相操控.全局变量与日期控件>(点击打开链接)的进一步工作

Linux 打开文件并写入一段字符串,同时读出对应文件的信息--fopen()/fwrite()/fread()

Linux 打开文件并写入一段字符串,同时读出对应文件的信息 在Linux中,采用C语言,使用fopen()函数打开一个文件(若不存在文件,则新建一个 如 data/test.dat),同时采用 fwrite()向其中写入相应的字符串,每次输入写入都换行,最后采用fread()读出相应的信息. 相应的代码如下:Test.c /* Test.c :create a file : Write a string to the file */ #include <stdio.h> #include &

Linux 打开文件并写入一段字符串,同一时候读出相应文件的信息--fopen()/fwrite()/fread()

Linux 打开文件并写入一段字符串.同一时候读出相应文件的信息 在Linux中.採用C语言.使用fopen()函数打开一个文件(若不存在文件,则新建一个 如 data/test.dat),同一时候採用 fwrite()向当中写入对应的字符串,每次输入写入都换行,最后採用fread()读出对应的信息. 对应的代码例如以下:Test.c /* Test.c :create a file : Write a string to the file */ #include <stdio.h> #inc