① 使用fopen函数读取数组为什么只读第一个元素
函数原型:FILE * fopen(const char * path,const char * mode);相关函数:open,fclose,fopen_s,_wfopen返回值:文件顺利打开后,指向该流的文件指针就会被返回。如果文件打开失败则返回NULL,并把错误代码存在errno 中。参数说明:参数path字符串包含欲打开的文件路径及文件名,参数mode字符串则代表着流形态。mode有下列几种形态字符串:r 以只读方式打开文件,该文件必须存在。r+ 以可读写方式打开文件,该文件必须存在。rb+ 读写打开一个二进制文件,允许读写数据,文件必须存在。w 打开只写文件,若文件存在则文件长度清为0,即该文件内容会消失。若文件不存在则建立该文件。
② 什么是fopen_s
fopen_s,_wfopen_s打开一个文件,这些版本比fopen,_wfopen在安全性上都有增强。使用方法:errno_t fopen_s( FILE** pFile, const char *filename, const char *mode );errno_t _wfopen_s( FILE** pFile, const wchar_t *filename, const wchar_t *mode );通过打开的文件fopen_s和_wfopen_s不是可共享。如果需要先设置为可共享一个文件,则使用_fsopen、_wfsopen与适当的共享模式常量,例如,_SH_DENYNO为读/写的共享。fopen_s函数打开的文件指定的filename._wfopen_s是宽字符版本的fopen_s; 参数与_wfopen_s是宽字符字符串。_wfopen_s和fopen_s的行为相同 ; 否则。fopen_s可以接受的有效执行 ; 在文件系统上的路径 UNC 路径和涉及到映射的网络驱动器的路径所接受的fopen_s,只要正在执行代码的系统有权访问该共享,或在执行时映射的网络驱动器。当构造路径fopen_s、 不要臆测可用性驱动器、 路径或网络共享的执行环境中。您可以使用正斜杠 (/) 或反斜杠 (\),作为路径中的目录分隔符。这些函数将验证它们的参数。如果pFile,filename,或mode为 null 的指针,这些函数生成无效参数异常,如中所述参数验证.检查返回值,是否函数成功执行该文件的任何进一步操作之前,请参阅。如果发生错误,则返回的错误代码和全局变量errno设置。有关详细信息,请参阅errno、_doserrno、_sys_errlist 和 _sys_nerr.
③ C语言如何将读入文件的方式改为以字节方式读入
fopen函数中使用mode控制参数"rb"即可:f=fopen("文件名","rb")。
fopen函数简介函数功能: 打开一个文件函数原型: * fopen(const char * path,const char * mode);相关函数:open,fclose,fopen_s[1] ,_wfopen所需库: <stdio.h>返回值: 文件顺利打开后,指向该流的文件指针就会被返回。若果文件打开失败则返回NULL,并把错误代码存在errno 中。一般而言,打开文件后会作一些文件读取或写入的动作,若打开文件失败,接下来的读写动作也无法顺利进行,所以在fopen()后请作错误判断及处理。参数说明:参数path字符串包含欲打开的文件路径及文件名,参数mode字符串则代表着流形态。mode有下列几种形态字符串:r 打开只读文件,该文件必须存在。r+ 打开可读写的文件,该文件必须存在。rb+ 读写打开一个二进制文件,只允许读写数据。rt+ 读写打开一个文本文件,允许读和写。w 打开只写文件,若文件存在则文件长度清为0,即该文件内容会消失。若文件不存在则建立该文件。w+ 打开可读写文件,若文件存在则文件长度清为零,即该文件内容会消失。若文件不存在则建立该文件。a 以附加的方式打开只写文件。若文件不存在,则会建立该文件,如果文件存在,写入的数据会被加到文件尾,即文件原先的内容会被保留。(EOF符保留)a+ 以附加方式打开可读写的文件。若文件不存在,则会建立该文件,如果文件存在,写入的数据会被加到文件尾后,即文件原先的内容会被保留。 (原来的EOF符不保留)wb 只写打开或新建一个二进制文件;只允许写数据。wb+ 读写打开或建立一个二进制文件,允许读和写。wt+ 读写打开或着建立一个文本文件;允许读写。at+ 读写打开一个文本文件,允许读或在文本末追加数据。ab+ 读写打开一个二进制文件,允许读或在文件末追加数据。上述的形态字符串都可以再加一个b字符,如rb、w+b或ab+等组合,加入b 字符用来告诉函数库打开的文件为二进制文件,而非纯文字文件。不过在POSIX系统,包含Linux都会忽略该字符。由fopen()所建立的新文件会具有S_IRUSR|S_IWUSR|S_IRGRP|S_IWGRP|S_IROTH|S_IWOTH(0666)权限,此文件权限也会参考umask 值。有些C编译系统可能不完全提供所有这些功能,有的C版本不用"r+","w+","a+",而用"rw","wr","ar"等,读者注意所用系统的规定。
④ 如何用fopen建立隐藏属性的文件
fopen的声明形式为:FILE *fopen(char *filename, char *mode);当mode设置为"w"时,会对一个名字为filename的文件执行写操作,如果文件存在,那么文件会被清空重写,否则将会创建文件。文件保存的位置,由filename决定。1 filename为绝对路径,那么将在filename指定的路径下建立文件,如filename = "D:\\test\\a.txt"则会在D盘test文件夹下,建立a.txt文件。2 filename中不包含路径信息,或包含相对路径信息,那么文件位置将由工作路径,和filename共同决定。如运行exe文件的工作路径为D:\clang\bin\而filename为"a.txt",那么就会生成D:\clang\bin\a.txt如果filename为"..\\file\\a.txt",那么就会生成D:\clang\bin\..\file\a.txt。也就是D:\clang\file\a.txt。
⑤ fopen的一个问题
请参考网络 函数简介函数功能:打开一个文件函数原型:FILE * fopen(const char * path,const char * mode);相关函数:open,fclose,fopen_s[1],_wfopen所需库:<stdio.h>返回值:文件顺利打开后,指向该流的文件指针就会被返回。如果文件打开失败则返回NULL,并把错误代码存在errno 中。一般而言,打开文件后会作一些文件读取或写入的动作,若打开文件失败,接下来的读写动作也无法顺利进行,所以一般在fopen()后作错误判断及处理。
⑥ C++的fopen在哪个头文件里
fopen函数在 stdio.h里面。它是用于打开文件的,更加详细的说明如下。FILE *fopen( const char *fname, const char *mode );fopen()函数打开由fname(文件名)指定的文件, 并返回一个关联该文件的流.如果发生错误, fopen()返回NULL. mode(方式)是用于决定文件的用途(例如 用于输入,输出,等等)Mode(方式) 意义 "r" 打开一个用于读取的文本文件 "w" 创建一个用于写入的文本文件 "a" 附加到一个文本文件 "rb" 打开一个用于读取的二进制文件 "wb" 创建一个用于写入的二进制文件 "ab" 附加到一个二进制文件 "r+" 打开一个用于读/写的文本文件 "w+" 创建一个用于读/写的文本文件 "a+" 打开一个用于读/写的文本文件 "rb+" 打开一个用于读/写的二进制文件 "wb+" 创建一个用于读/写的二进制文件 "ab+" 打开一个用于读/写的二进制文件
⑦ C语言中指针读写文件,问什么记事本都是乱码,怎么改呢
从代码看,在Windows平台是有大概率会乱码,假如你的商品信息数组里存放了换行就一定会乱码。
主要问题在文件的打开方式不对,fread, fwrite函数最好以二进制模式打开文件,即打开方式加上b,即(rb, wb)。在unix/Linux系统应该没问题。以下是问题解释:
二进制和文本模式的区别
1.在windows系统中,文本模式下,文件以""代表换行。若以文本模式打开文件,并用fputs等函数写入换行符""时,函数会自动在""前面加上""。即实际写入文件的是"" 。
2.在类Unix/Linux系统中文本模式下,文件以""代表换行。所以Linux系统中在文本模式和二进制模式下并无区别。
(7)wfopen读文件扩展阅读:
ffopen为C语言编程中所需的一个常用语言,多数用来打开文件。其调用的一般形式为:文件指针名=fopen(文件名,使用文件方式);其中,‘’文件指针名”必须是被说明为FILE 类型的指针变量,文件名”是被打开文件的文件名;“使用文件方式”是指文件的类型和操作要求。“文件名”是字符串常量或字符串数组。
基本介绍函数功能:打开一个文件函数原型:FILE * fopen(const char * path,const char * mode);相关函数:open,fclose,fopen_s,_wfopenfopen所需库:返回值:文件顺利打开后,指向该流的文件指针就会被返回。如果文件打开失败则返回NULL,并把错误代码存在errno 中。一般而言,打开文件后会做一些文件读取或写入的动作,若打开文件失败,接下来的读写动作也无法顺利进行,所以一般在fopen()后作错误判断及处理。
参数说明:参数path字符串包含欲打开的文件路径及文件名,参数mode字符串则代表着流形态。
mode有下列几种形态字符串:
r 以只读方式打开文件,该文件必须存在。
r+ 以可读写方式打开文件,该文件必须存在。
rb+ 读写打开一个二进制文件,允许读写数据。
rw+ 读写打开一个文本文件,允许读和写。
w 打开只写文件,若文件存在则文件长度清为0,即该文件内容会消失。若文件不存在则建立该文件。
w+ 打开可读写文件,若文件存在则文件长度清为零,即该文件内容会消失。若文件不存在则建立该文件。
a 以附加的方式打开只写文件。若文件不存在,则会建立该文件,如果文件存在,写入的数据会被加到文件尾,即文件原先的内容会被保留。(EOF符保留)
a+ 以附加方式打开可读写的文件。若文件不存在,则会建立该文件,如果文件存在,写入的数据会被加到文件尾后,即文件原先的内容会被保留。 (原来的EOF符不保留)
wb 只写打开或新建一个二进制文件;只允许写数据。
wb+ 读写打开或建立一个二进制文件,允许读和写。ab+ 读写打开一个二进制文件,允许读或在文件末追加数据。
⑧ 如何用C语言读写文件
fopen函数功能:打开一个文件函数原型:FILE * fopen(const char * path,const char * mode);相关函数:open,fclose,fopen_s,_wfopen所需库:<stdio.h>返回值:文件顺利打开后,指向该流的文件指针就会被返回。如果文件打开失败则返回NULL,并把错误代码存在errno 中。函数简介函数原型:FILE * fopen(const char * path,const char * mode);返回值:文件顺利打开后,指向该流的文件指针就会被返回。如果文件打开失败则返回NULL,并把错误代码存在errno 中。一般而言,打开文件后会做一些文件读取或写入的动作,若打开文件失败,接下来的读写动作也无法顺利进行,所以一般在fopen()后作错误判断及处理。参数说明:参数path字符串包含欲打开的文件路径及文件名,参数mode字符串则代表着流形态。mode有下列几种形态字符串:r 以只读方式打开文件,该文件必须存在。r+ 以可读写方式打开文件,该文件必须存在。rb+ 读写打开一个二进制文件,允许读写数据,文件必须存在。rw+ 读写打开一个文本文件,允许读和写。w 打开只写文件,若文件存在则文件长度清为0,即该文件内容会消失。若文件不存在则建立该文件。w+ 打开可读写文件,若文件存在则文件长度清为零,即该文件内容会消失。若文件不存在则建立该文件。a 以附加的方式打开只写文件。若文件不存在,则会建立该文件,如果文件存在,写入的数据会被加到文件尾,即文件原先的内容会被保留。(EOF符保留)a+ 以附加方式打开可读写的文件。若文件不存在,则会建立该文件,如果文件存在,写入的数据会被加到文件尾后,即文件原先的内容会被保留。 (原来的EOF符不保留)wb 只写打开或新建一个二进制文件;只允许写数据。wb+ 读写打开或建立一个二进制文件,允许读和写。ab+ 读写打开一个二进制文件,允许读或在文件末追加数据。at+ 打开一个叫string的文件,a表示append,就是说写入处理的时候是接着原来文件已有内容写入,不是从头写入覆盖掉,t表示打开文件的类型是文本文件,+号表示对文件既可以读也可以写。上述的形态字符串都可以再加一个b字符,如rb、w+b或ab+等组合,加入b 字符用来告诉函数库以二进制模式打开文件。如果不加b,表示默认加了t,即rt,wt,其中t表示以文本模式打开文件。由fopen()所建立的新文件会具有S_IRUSR|S_IWUSR|S_IRGRP|S_IWGRP|S_IROTH|S_IWOTH(0666)权限,此文件权限也会参考umask值。有些C编译系统可能不完全提供所有这些功能,有的C版本不用"r+","w+","a+",而用"rw","wr","ar"等,读者注意所用系统的规定。二进制和文本模式的区别1.在windows系统中,文本模式下,文件以"\r\n"代表换行。若以文本模式打开文件,并用fputs等函数写入换行符"\n"时,函数会自动在"\n"前面加上"\r"。即实际写入文件的是"\r\n" 。2.在类Unix/Linux系统中文本模式下,文件以"\n"代表换行。所以Linux系统中在文本模式和二进制模式下并无区别。打开方式总结:各种打开方式主要有三个方面的区别:①打开是否为二进制文件,用“b”标识。②读写的方式,有以下几种:只读、只写、读写、追加只写、追加读写这几种方式。③对文件是否必须存在、以及存在时是清空还是追加会有不同的响应。具体判断如下图。参考http://ke..com/view/656681.htm?fr=aladdin
⑨ 关于函数 _wfopen_s()
_wfopen_s()不是标准C里的函数,只能在windows上用,Linux下没有这个函数。fopen()你应该很清楚了,就是你传入一个文件名和读写模式,然后它就给你一个FILE*句柄。文件名是char *类型的。_wfopen_s()跟fopen()有两点区别:1. _w表示传入的参数是wchar_t *类型的。就是说,你必须传入unicode字符串。在中文操作系统里,日文,韩文或者泰文等非拉丁语系的文字,如果用普通字符串表示,可能会显示成乱码,这个时候你用fopen()函数就没法打开指定的文件。反之,中文在其他语言的操作系统里也有一样问题。而unicode就没有这个问题,所以最好用_w版本的fopen。2. _s表示该函数是线程安全的。就是说fopen()是非线程安全的,而_wfopen_s()是线程安全的。关于线程安全的定义,你自己用搜索引擎搜一下就知道了。
⑩ c 语言读取文件 读取txt文件中第三个空格和第四个空格间的汉字,并把读取的汉字存成一个单独的文件
/*请务必保证每行都由四个空格,并且第四个空格后还有至少一个字符*/#include <stdio.h>#include <conio.h>#include <stdlib.h>#include <locale.h> FILE * wopenfile(const wchar_t * const filename,const wchar_t * const openmodel);void savefile(const wchar_t * const infilename,const wchar_t * const outfilename)/*保存一行中第三和第四个空格之间的汉字*/;int main(void){FILE *fp;const wchar_t * const infilename=L"E:\\database\\text1.txt";const wchar_t * const outfilename=L"E:\\database\\text2.txt";wchar_t wch;setlocale(LC_CTYPE, "chs");/*设置字符集运行环境为简体中文字符集*/savefile(infilename,outfilename);setlocale(LC_CTYPE, "C");printf("OK!\n");getch();return 0;}FILE * wopenfile(const wchar_t * const filename,const wchar_t * const openmodel){FILE *fp;fp=_wfopen(filename,openmodel);if(!fp){printf("Function fpenfile Error:Can not open file %s\n",filename);getch();exit(-1);}return fp;}void savefile(const wchar_t * const infilename,const wchar_t * const outfilename)/*保存一行中第三和第四个空格之间的汉字*/{FILE * fpin,* fpout;wchar_t wch;fpin=wopenfile(infilename,L"r,ccs=unicode");fpout=wopenfile(outfilename,L"w,ccs=unicode");while((wch=fgetwc(fpin))!=(wchar_t)EOF){if(fwscanf(fpin,L"%*ls%*ls%*ls%*c")==-1)break;while((wch=fgetwc(fpin))!=L' ' && wch !=(wchar_t)EOF)if(wch>127)fwprintf(fpout,L"%c",wch);fwscanf(fpin,L"%*l[^\n]");}fclose(fpin);fclose(fpout);}