VC读写函数详解(针对文件)
- 格式:doc
- 大小:47.50 KB
- 文档页数:10
VC读写函数详解1.当前文件指针位置获取函数long ftell( FILE *stream );参数:stream 文件指针返回值:当前文件指针的位置实例:#include <stdio.h>FILE *stream;void main( void ){long position;char list[100];if( (stream = fopen( "ftell.c", "rb" )) != NULL ){/* Move the pointer by reading data: */fread( list, sizeof( char ), 100, stream );/* Get position after read: */position = ftell( stream );printf( "Position after trying to read 100 bytes: %ld\n",position );fclose( stream );}}输出:Position after trying to read 100 bytes: 1002.文件的打开函数FILE *fopen( const char *filename, const char *mode );FILE *_wfopen( const wchar_t *filename, const wchar_t *mode );参数:filename 文件的名称mode 打开文件的模式返回值:成功的打开文件的话返回文件的指针否则返回NULL表示打开文件错误注:"r"只读方式打开"w"以写入方式打开"a"从文件的尾端写入数据,要是文件不存在则创建后写入数据"r+"以读写方式打开(文件必须存在)"w+"打开一个可以读写的文件,如果该文件存在则覆盖写入"a+"打开文件并追加写入源于<stdio.h>实例:#include <stdio.h>FILE *stream, *stream2;void main( void ){int numclosed;/* Open for read (will fail if file "data" does not exist) */if( (stream = fopen( "data", "r" )) == NULL )printf( "The file 'data' was not opened\n" );elseprintf( "The file 'data' was opened\n" );/* Open for write */if( (stream2 = fopen( "data2", "w+" )) == NULL )printf( "The file 'data2' was not opened\n" );elseprintf( "The file 'data2' was opened\n" );/* Close stream */if( fclose( stream ) )printf( "The file 'data' was not closed\n" );/* All other files are closed: */numclosed = _fcloseall( );printf( "Number of files closed by _fcloseall: %u\n", numclosed ); }输出:The file 'data' was openedThe file 'data2' was openedNumber of files closed by _fcloseall: 13.文件读取函数size_t fread( void *buffer, size_t size, size_t count, FILE *stream ) 参数: buffer 文件读取缓冲区 size 读取数据的类型 count 读取数据的个数stream 文件指针返回值:实际读取的数据个数源于<stdio.h>例子:FILE* fp;char* buffer=new char[1024];long realLength=fread(buffer,sizeof(char),1024,fp);////处理过程//delete buffer;fclose(fp);4.文件的写入函数size_t fwrite( const void *buffer, size_t size, size_t count, FILE*stream );参数: buffer 所要写入文件的缓冲区 size 写入数据的类型 count 写入数据的个数 stream 文件指针返回值:实际写入的数据个数源于<stdio.h>实例:#include <stdio.h>void main( void ){FILE *stream;char list[30];int i, numread, numwritten;/* Open file in text mode: */if( (stream = fopen( "fread.out", "w+t" )) != NULL ){for ( i = 0; i < 25; i++ )list[i] = (char)('z' - i);/* Write 25 characters to stream */numwritten = fwrite( list, sizeof( char ), 25, stream );printf( "Wrote %d items\n", numwritten );fclose( stream );}elseprintf( "Problem opening the file\n" );if( (stream = fopen( "fread.out", "r+t" )) != NULL ){/* Attempt to read in 25 characters */numread = fread( list, sizeof( char ), 25, stream );printf( "Number of items read = %d\n", numread );printf( "Contents of buffer = %.25s\n", list );fclose( stream );}elseprintf( "File could not be opened\n" );}输出:Wrote 25 itemsNumber of items read = 25Contents of buffer = zyxwvutsrqponmlkjihgfedcb5.文件指针搜索函数int fseek( FILE *stream, long offset, int origin )参数: stream 文件指针 offset 从当前指针开始的偏移量 origin 文件指针当前的位置返回值:成功返回0 否则返回非零值注:指针移动的时候是按字节移动的,要是成功的话文件的指针将指向当前搜索到的位置origin 可以的取值在 stdio.h已经定义如下:SEEK_CUR当前的文件指针SEEK_END文件结束SEEK_SET文件的开始源于<stdio.h>实例:#include <stdio.h>void main( void ){FILE *stream;char line[81];int result;stream = fopen( "fseek.out", "w+" );if( stream == NULL )printf( "The file fseek.out was not opened\n" );else{fprintf( stream, "The fseek begins here: ""This is the file 'fseek.out'.\n" );result = fseek( stream, 23L, SEEK_SET);if( result )printf( "Fseek failed" );else{printf( "File pointer is set to middle of first line.\n" ); fgets( line, 80, stream );printf( "%s", line );}fclose( stream );}}输出:File pointer is set to middle of first line.This is the file 'fseek.out'.6.按固定的格式写入数据函数int fprintf( FILE *stream, const char *format [, argument ]...)int fwprintf( FILE *stream, const wchar_t *format [, argument ]...) 参数:stream 文件指针format 按照一定的格式argument 可选参数列表返回值:fprintf 返回实际写入的字节数.fwprintf返回实际写入的wchar_t 的字节数源于<stdio.h>实例:#include <stdio.h>#include <process.h>FILE *stream;void main( void ){int i = 10;double fp = 1.5;char s[] = "this is a string";char c = '\n';stream = fopen( "fprintf.out", "w" );fprintf( stream, "%s%c", s, c );fprintf( stream, "%d\n", i );fprintf( stream, "%f\n", fp );fclose( stream );system( "type fprintf.out" );}输出:this is a string101.5000007.按固定的格式读入数据函数int fscanf( FILE *stream, const char *format [, argument ]... )int fwscanf( FILE *stream, const wchar_t *format [, argument ]... ) 参数:stream 文件指针format 按照一定的格式argument 可选参数列表返回值:fscanf 返回实际读入的字节数.fwscanf返回实际读入的wchar_t 的字节数如果返回值为 0 则说明没有被赋值如果有文件结束或是异常的IO错误时返回 EOF(宏定义)源于<stdio.h>实例:#include <stdio.h>FILE *stream;void main( void ){long l;float fp;char s[81];char c;stream = fopen( "fscanf.out", "w+" );if( stream == NULL )printf( "The file fscanf.out was not opened\n" );else{fprintf( stream, "%s %ld %f%c", "a-string",65000, 3.14159, 'x' );/* Set pointer to beginning of file: */fseek( stream, 0L, SEEK_SET );/* Read data back from file: */fscanf( stream, "%s", s );fscanf( stream, "%ld", &l );fscanf( stream, "%f", &fp );fscanf( stream, "%c", &c );/* Output data read: */printf( "%s\n", s );printf( "%ld\n", l );printf( "%f\n", fp );printf( "%c\n", c );fclose( stream );}}输出:a-string650003.141590X8.文件指针的定位和获取int fsetpos( FILE *stream, const fpos_t *pos );int fgetpos( FILE *stream, const fpos_t *pos );参数:stream 目标文件指针pos 文件指针的位置返回值:设置指针位置成功的话fsetpos返回0 否则返回一个非零的数获得指针位置成功的话fgetpos返回0 否则返回一个非零的数源于<stdio.h>实例:#include <stdio.h>void main( void ){FILE *stream;fpos_t pos;char buffer[20];if( (stream = fopen( "fgetpos.c", "rb" )) == NULL )printf( "Trouble opening file\n" );else{/* Read some data and then check the position. */fread( buffer, sizeof( char ), 10, stream );if( fgetpos( stream, &pos ) != 0 )printf( "fgetpos error" );else{fread( buffer, sizeof( char ), 10, stream );printf( "10 bytes at byte %I64d: %.10s\n", pos, buffer ); }/* Set a new position and read more data */pos = 140;if( fsetpos( stream, &pos ) != 0 )printf( "fsetpos error" );fread( buffer, sizeof( char ), 10, stream );printf( "10 bytes at byte %I64d: %.10s\n", pos, buffer );fclose( stream );}}输出:10 bytes at byte 10: .C: This p10 bytes at byte 140: .C and the9.文件指针重新定位到开始void rewind( FILE *stream )参数:stream 文件指针返回值:无注:执行完本函数后,文件的指针将返回到开始位置实例:#include <stdio.h>void main( void ){FILE *stream;int data1, data2;data1 = 1;data2 = -37;if( (stream = fopen( "rewind.out", "w+" )) != NULL ){fprintf( stream, "%d %d", data1, data2 );printf( "The values written are: %d and %d\n", data1, data2 ); rewind( stream );fscanf( stream, "%d %d", &data1, &data2 );printf( "The values read are: %d and %d\n", data1, data2 );fclose( stream );}}输出:The values written are: 1 and -37The values read are: 1 and -3710.取得文件指针所指的行char *fgets( char *string, int n, FILE *stream );int fputs( const char *string, FILE *stream );参数:fgets 的string 保存到的字符串缓冲,而fputs 的string 表示要写入的字符串n表示从文件中读出的字符串不超过 n-1个字符,在读入的最后一个字符后加上串结束标志'\0'stream 文件指针返回值:成功的话返回字符数组的首地址否则返回NULL源于<stdio.h>实例:#include <stdio.h>void main( void ){FILE *stream;char line[100];if( (stream = fopen( "fgets.c", "r" )) != NULL ){if( fgets( line, 100, stream ) == NULL)printf( "fgets error\n" );elseprintf( "%s", line);fclose( stream );}fputs( "Hello world from fputs.\n", stdout );}输出:This program uses fgets to displayHello world from fputs.11.关闭文件函数int _fcloseall( void )int fclose( FILE *stream )参数:stream 文件指针返回值:fclose成功关闭返回 0 否则返回EOF 表示错误_fcloseall 成功返回总共关闭的文件数否则的话返回EOF 表示错误实例:#include <stdio.h>FILE *stream, *stream2;void main( void ){int numclosed;/* Open for read (will fail if file "data" does not exist) */if( (stream = fopen( "data", "r" )) == NULL )printf( "The file 'data' was not opened\n" );elseprintf( "The file 'data' was opened\n" );/* Open for write */if( (stream2 = fopen( "data2", "w+" )) == NULL )printf( "The file 'data2' was not opened\n" );elseprintf( "The file 'data2' was opened\n" );/* Close stream */if( fclose( stream ) )printf( "The file 'data' was not closed\n" );/* All other files are closed: */numclosed = _fcloseall( );printf( "Number of files closed by _fcloseall: %u\n", numclosed ); }输出:The file 'data' was openedThe file 'data2' was openedNumber of files closed by _fcloseall: 1完。
visual studio 文件操作函数Visual Studio是一款功能强大的集成开发环境(Integrated Development Environment,简称IDE),广泛用于开发各种类型的应用程序。
在Visual Studio中,文件操作是开发过程中非常常见和重要的一部分。
本文将介绍一些常用的Visual Studio文件操作函数,帮助开发者更加高效地处理文件相关操作。
一、文件创建与打开1. `CreateFile`函数:用于创建或打开一个文件。
该函数可以指定文件名、访问权限、共享模式等参数,并返回一个表示文件句柄的值。
2. `fopen`函数:用于打开一个文件,并返回一个指向该文件的指针。
通过该指针,可以进行文件读写操作。
二、文件读写操作1. `ReadFile`函数:用于从文件中读取数据。
该函数可以指定文件句柄、读取的字节数、读取数据的缓冲区等参数,并返回读取的字节数和读取结果。
2. `WriteFile`函数:用于向文件中写入数据。
该函数可以指定文件句柄、要写入的数据、写入的字节数等参数,并返回写入的字节数和写入结果。
3. `fgets`函数:用于从文件中读取一行数据。
该函数可以指定要读取的字节数、读取数据的缓冲区和文件指针,并返回指向读取数据的指针。
三、文件定位与指针操作1. `fseek`函数:用于定位文件指针的位置。
该函数可以指定文件指针、偏移量和起始位置,并返回定位结果。
2. `ftell`函数:用于获取文件指针的当前位置。
该函数可以指定文件指针,并返回当前位置的偏移量。
3. `rewind`函数:用于将文件指针重新定位到文件的起始位置。
该函数可以指定文件指针,并无返回值。
四、文件关闭与删除1. `fclose`函数:用于关闭一个已打开的文件。
该函数可以指定要关闭的文件指针,并返回关闭结果。
2. `remove`函数:用于删除一个文件。
该函数可以指定要删除的文件名,并返回删除结果。
CC++关于⽂件的读写操作以及⽂件的打开和保存通过近来的学习,总结⼀下关于⽂件的读写操作以及⽂件的打开和保存的⽅法。
⼀、⽂件的读写操作:(1)C语⾔对⽂件的读写操作在C语⾔中,对⽂件的读写操作是⽤FILE结构体和常⽤的对⽂件操作的函数实现的,下⾯总结⼀下C语⾔中对⽂件操作的常⽤函数:fopen() 打开以⽂件名指定的⽂件fwrite() 写⽂件fread() 读⽂件fseek() 移动⽂件的指针到新的位置通过该函数的参数设定的偏移量和初始位置rewind() 移动⽂件的指针到⽂件流的开始位置,在通常情况下可⽤fseek()实现相同的功能,但⼆者有区别ftell() 获得当前⽂件指针的位置,常⽤该函数获得⽂件的⽂件流的长度fflush() 刷新缓冲区中的内容,当⽂件写⼊时直接将⽂件流的内容从缓冲区写⼊磁盘,当读取⽂件时直接将磁盘⽂件写⼊缓冲区,⽽不必等程序运⾏结束或关闭程序。
fclose() 关闭⽂件memset() 在⼀段内存块中填充某个给定的值⽰例代码如下:/*********************************************************** C语⾔实现⽂件写操作 ************************************************************/FILE *pFile=fopen("CLanguage.txt","w");fwrite("CLanguage",1,strlen("CLanguage"),pFile);//fseek(pFile,0,SEEK_SET);//fwrite("实现⽂件写操作",1,strlen("实现⽂件写操作"),pFile);fclose(pFile);/*********************************************************** C语⾔实现⽂件读操作 ************************************************************/FILE *pFile=fopen("CLanguage.txt","r");//char ch[100];//memset(ch,0,100);//fread(ch,1,100,pFile);//MessageBox(ch);char* pBuf;int length;fseek(pFile,0,SEEK_END);length=ftell(pFile);pBuf=new char[length+1];//fseek(pFile,0,SEEK_SET);rewind(pFile);fread(pBuf,1,length,pFile);pBuf[length]=0;MessageBox(pBuf);fclose(pFile);注意:在⽤C语⾔实现⽂件的读操作时,要注意⽂件的指针位置。
c文件读写函数C文件读写函数是在C语言中用于处理文件的函数。
它们允许我们从文件中读取数据或向文件中写入数据。
在本文中,我们将介绍一些常用的C文件读写函数,并讨论它们的用法和注意事项。
1. fopen函数:用于打开一个文件,并返回一个指向该文件的指针。
它接受两个参数,第一个参数是要打开的文件的路径和名称,第二个参数是打开文件的模式(如只读、写入等)。
打开文件成功后,该函数将返回一个指向文件的指针,否则返回NULL。
2. fclose函数:用于关闭一个打开的文件。
它接受一个参数,即要关闭的文件的指针。
关闭文件后,该指针将不再有效。
3. fgetc函数:用于从文件中读取一个字符,并将该字符作为整数返回。
它接受一个参数,即要读取的文件的指针。
4. fputc函数:用于将一个字符写入文件。
它接受两个参数,第一个参数是要写入的字符,第二个参数是要写入的文件的指针。
5. fgets函数:用于从文件中读取一行字符,并将它们保存在一个字符串中。
它接受三个参数,第一个参数是保存读取字符的字符串的指针,第二个参数是要读取的最大字符数,第三个参数是要读取的文件的指针。
6. fputs函数:用于将一个字符串写入文件。
它接受两个参数,第一个参数是要写入的字符串,第二个参数是要写入的文件的指针。
7. fread函数:用于从文件中读取一定数量的数据,并将它们保存在一个缓冲区中。
它接受四个参数,第一个参数是保存读取数据的缓冲区的指针,第二个参数是每个数据项的大小(以字节为单位),第三个参数是要读取的数据项的数量,第四个参数是要读取的文件的指针。
8. fwrite函数:用于将一定数量的数据从一个缓冲区写入文件。
它接受四个参数,第一个参数是保存要写入数据的缓冲区的指针,第二个参数是每个数据项的大小(以字节为单位),第三个参数是要写入的数据项的数量,第四个参数是要写入的文件的指针。
9. fseek函数:用于在文件中定位到指定的位置。
它接受三个参数,第一个参数是要定位的文件的指针,第二个参数是要移动的字节数,第三个参数是起始位置(如文件开头、当前位置、文件末尾)。
VC++中⽂件读写相关操作技巧CFile类的声明保存在afx.h头⽂件中。
CFile类是MFC⽂件类的基类,提供⾮缓冲⽅式的⼆进制磁盘输⼊、输出功能;并直接通过派⽣类来⽀持⽂本⽂件和内存⽂件。
提供访问本地⽂件内容的功能,不⽀持访问⽹络⽂件的功能。
CFile类的成员变量:m_hFile:表⽰⼀个打开⽂件的操作系统⽂件句柄。
通过对m_hFile 与 CFile::hFileNull的⽐较来判断该⽂件是否已经打开。
CFile类的成员函数:1、构造函数类CFile():在创建⼀个CFile对象时,我们可以采⽤3种⽅法实现。
A、CFile myFile;myFile.Open(LPCTSTR lpFileName,UINT nOpenFlags,CFileException * pError = NULL);B、CFile myFile(int hFile); 采⽤句柄⽅式创建使⽤该创建⽅法,在之前需要调⽤ CreateFile()函数,该函数的声明如下:HANDLE CreateFile(LPCTSTR lpFileName, ⽂件名称DWORD dwDesiredAccess, ⽂件访问的模式DWORD dwShareMode, ⽂件的共享模式LPSECURITY_ATTTRIBUTE lpSecurityAttribute,DWORD dwCreationDisposition, 怎么访问DWORD dwFlagsAndAttribute, ⽂件属性HANDLE hTemplateFile, 临时⽂件句柄);handle = ::CreateFile(“new.tmp”,GENERIC_READ|GENERIC_WRITE,0,NULL,OPEN_ALWAYS,FILE_FLAG_DELETE_ON_CLOSE,NULL);C、CFile(LPCTSTR lpFileName,UINT nOpenFlags); ⽂件名称,可以是相对路径,绝对路径或者⽹络路径。
c语言文件操作函数C语言文件操作函数C语言文件操作函数是C语言提供的一种文件操作方式,可以通过这些函数来读取、写入和修改文件。
文件操作函数可以帮助我们完成很多与文件有关的任务,比如读取配置文件、保存用户数据等。
在本文中,将介绍C语言中常用的文件操作函数。
打开文件在C语言中,我们可以使用fopen()函数来打开一个文件。
该函数的原型如下:FILE *fopen(const char *filename, const char *mode);其中,filename表示要打开的文件名,mode表示打开文件的模式。
mode的取值如下:- "r":以只读方式打开文件- "w":以写方式打开文件,如果文件不存在,则创建该文件;如果文件已存在,则清空该文件- "a":以写方式打开文件,如果文件不存在,则创建该文件;如果文件已存在,则在文件末尾追加数据- "r+":以读写方式打开文件,文件必须存在- "w+":以读写方式打开文件,如果文件不存在,则创建该文件;如果文件已存在,则清空该文件- "a+":以读写方式打开文件,如果文件不存在,则创建该文件;如果文件已存在,则在文件末尾追加数据例如,我们可以使用以下代码来打开一个名为example.txt的文件:FILE *fp;fp = fopen("example.txt", "w+");if (fp == NULL) {printf("Open file failed!\n");}在打开文件之后,我们可以使用fclose()函数来关闭文件,释放文件资源。
例如:fclose(fp);读取文件在C语言中,我们可以使用fscanf()函数从文件中读取数据。
该函数的原型如下:int fscanf(FILE *stream, const char *format, ...);其中,stream表示要读取数据的文件,format表示数据的格式。
VC++中对文件的写入和读取本文介绍两种方法对文件进行读取和写入操作:1、采用fstream 类;2、采用CStdioFile类。
CStdioFile继承自CFile,一个CStdioFile对象代表一个用运行时函数fopen 打开的C 运行时流式文件。
C++中的fstream类,所有的I/O都以这个“流”类为基础的,包括我们要认识的文件I/O。
stream类有两个重要的运算符:插入器(<<)和析取器(>>)。
插入器(<<)即向流输出数据,析取器(>>)即从流中输入数据。
在C++中,对文件的操作是通过stream的子类fstream(file stream)来实现的,所以,要用这种方式操作文件,就必须加入头文件fstream.h。
fstream类包括向“流”输出数据的ofstream类和从“流”中输出数据的ifstream类。
1、文件的写入往文件中写入数据的操作较为简单,这里以fstream类中往文件写入数据为例,介绍VC++中对文件的写入方法。
对于用CstdioFile 类对文件进行写入操作可参看相关资料。
下面给出采用fstream类对文件进行写入操作的代码:#include <fstream.h>ofstream of1;//创建对象of1.open("数据记录.txt",ios::out,filebuf::openprot);//打开文件int i;//定义一个整型变量float f; //定义一个单精度浮点型变量double d; //定义一个双精度浮点型变量i=123;//赋值f=3.478f; //赋值d=859.653; //赋值of1<<i<<’\t’<<f<<’\t’<<d;//写入数据of1.close();//关闭文件运行后打开“数据记录.txt”文件,内容见图1,变量i,f,d已写入文件中。
C++文件操作有多种方法,有操作系统提供API函数, C语言库函数,C++文件流类库, 开发工具提供的类库. 最重要的需要了解C语言库函数。
文件需要先打开, 然后才能进行读写, 最后需要关闭文件。
主要相关库函数介绍:1.打开文件FILE*fopen(const char*filename, const char*mode);fopen功能:打开一个文件,返回一个FILE指针;失败返回NULL。
参数filename指向要打开的文件名, 可以使用绝对路径,也可以使用相对路径;mode表示打开状态的字符串,其取值如下:字符串含义"r" 以只读方式打开文件"w" 以只写方式打开文件"a" 以追加方式打开文件"r+" 以读/写方式打开文件,如无文件出错"w+" 以读/写方式打开文件,如无文件生成新文件一个文件可以以文本模式或二进制模式打开,区别是:文本方式会按一定的方式对数据作相应的转换,而二进制模型不会对数据进行转换。
大多数应用使用二进制模式处理文件如图象,声音,WORD文件。
我们可以在模式字符串中指定打开的模式,加入"b"表示以二进制模式打开文件,加入"t"表示以文本模式打开文件, 默认为文本方式。
如"wb" 以只写方式打开二进制文件2. 关闭文件int fclose(FILE*stream);fclose()的功能就是关闭用fopen()打开的文件;如果成功,返回0,失败返回EOF。
文件系统有缓存, 在程序结束时一定要记得关闭打开的文件,不然可能会造成数据丢失的情况。
3. 读文件fread() 本函数一般用于二进制模式打开的文件中size_t fread(void *ptr, size_tsize, size_t n, FILE *stream);从流中读指定个数的字节,参数ptr是保存读取的数据,void*的指针可用任何类型的指针来替换,如char*、int *等等来替换;size是每块的字节数;n是读取的块数,如果成功,返回实际读取的块数(不是字节数;由于文件内容读完,实际可能小于n块)。
文件操作应用程序中很多时候需要创建、打开不同格式的文件,存储或者读取不同格式的数据信息。
分别介绍两种方式的文件操作所需的函数:——————————————————————————————————一使用Windows CE提供的API函数1> 创建/打开文件HANDLE CreateFile(LPCTSTR lpFileName,DWORD dwDesiredAccess,DWORD dwShareMode,LPSECURITY_ATTRIBUTES lpSecurityAttributes,DWORD dwCreationDisposition,DWORD dwFlagsAndAttributes,HANDLE hTemplateFile);参数含义:lpFileName:创建/打开文件的文件名,需要包括其完整路径。
dwDesiredAccess:指定文件的访问权限,如可读,可写。
(详见表1)GENERIC_READ 可读GENERIC_WRITE 可写GENERIC_WRITE | GENERIC_READ 可读可写0 不可读不可写,只能获取文件属性表1dwShareMode:在本进程创建或者打开一个文件后(未关闭之前),其他进程是否还可以具有访问该文件的权限,由此参数设定。
(详见表2)FILE_SHARE_WRITE 其他进程打开文件时的访问权限为只写时,成功FILE_SHARE_READ 其他进程打开文件时的访问权限为只读时,成功0 在该文件的句柄被关闭之前,不能够被共享,也不能够被打开表2lpSecurityAttributes:指定文件访问的安全属性,Windows CE下不支持该参数,因此设置为NULL。
dwCreationDisposition:指定创建/打开文件的方式。
(详见表3)GREA TE_NEW 创建一个新文件,如果文件已经存在,则函数执行失败GREA TE_ALW AYS 创建一个文件,如果文件已经存在,则覆盖此文件,并清空已经存在的属性OPEN_EXISTING 打开一个已经存在的文件,如果文件不存在,则函数执行失败OPEN_ALWAYS 打开一个已经存在的文件,如果文件不存在,则创建一个新文件TRUNCA TE_EXISTING 打开一个已经存在的文件,并将其截断到0字节,如果文件不存在,则函数执行失败表3注:该参数设置为TRUNCA TE_EXISTING,有一个必要的条件:dwDesiredAccess 参数必须设置为GENERIC_WRITE。
VC中的文件读写操作各种关于文件的操作在程序设计中是十分常见,如果能对其各种操作都了如指掌,就可以根据实际情况找到最佳的解决方案,从而在较短的时间内编写出高效的代码,因而熟练的掌握文件操作是十分重要的。
本文将对Visual C++中有关文件操作进行全面的介绍,并对在文件操作中经常遇到的一些疑难问题进行详细的分析。
1.文件的查找当对一个文件操作时,如果不知道该文件是否存在,就要首先进行查找。
MFC中有一个专门用来进行文件查找的类CFileFind,使用它可以方便快捷地进行文件的查找。
下面这段代码演示了这个类的最基本使用方法。
CString strFileTitle;CFileFind finder;BOOL bWorking = finder.FindFile("C:\\windows\\sysbkup\\*.cab");while(bWorking){bWorking=finder.FindNextFile();strFileTitle=finder.GetFileTitle();}2.文件的打开/保存对话框让用户选择文件进行打开和存储操作时,就要用到文件打开/保存对话框。
MFC的类CFileDialog用于实现这种功能。
使用CFileDialog声明一个对象时,第一个BOOL型参数用于指定文件的打开或保存,当为TRUE时将构造一个文件打开对话框,为FALSE时构造一个文件保存对话框。
在构造CFileDialog对象时,如果在参数中指定了OFN_ALLOWMULTISELECT风格,则在此对话框中可以进行多选操作。
此时要重点注意为此CFileDialog对象的m_ofn.lpstrFile 分配一块内存,用于存储多选操作所返回的所有文件路径名,如果不进行分配或分配的内存过小就会导致操作失败。
下面这段程序演示了文件打开对话框的使用方法。
CFileDialog mFileDlg(TRUE,NULL,NULL,OFN_HIDEREADONLY|OFN_OVERWRITEPROMPT|OFN_ALLOWMULTISELECT, "All Files (*.*)|*.*||",AfxGetMainWnd());CString str(" ",10000);mFileDlg.m_ofn.lpstrFile=str.GetBuffer(10000);str.ReleaseBuffer();POSITION mPos=mFileDlg.GetStartPosition();CString pathName(" ",128);CFileStatus status;while(mPos!=NULL){pathName=mFileDlg.GetNextPathName(mPos);CFile::GetStatus( pathName, status );}3.文件的读写文件的读写非常重要,下面将重点进行介绍。
VC逐行读写文件(.TXT)时间:2010-02-05 16:22来源:未知作者:zzl 点击:1973次用流在写日志时,发现如果把"\r\n"直接写在字符串的尾部,则会造成乱码,其中的原因网上有很多说明,主要是标准库与WINDOWS的回车换行的机制略有差别。
但只要写到另一行重起就没有用流在写日志时,发现如果把"\r\n"直接写在字符串的尾部,则会造成乱码,其中的原因网上有很多说明,主要是标准库与WINDOWS的回车换行的机制略有差别。
但只要写到另一行重起就没有问题了。
/******************************************************************** ********** 写入日志文件-C++标准版(UNICODE)* 函数名:WriteLogTxt* 功能写入日志* 说明:* 参数:* 创建人:fjf* 创建时间:2009-09-10* 修改人:* 修改时间:********************************************************************* ********/bool CConLog::WriteLogTxt(CString time, CString value){//定义写入字符数组CString tmp = time + value;//定义输出流ofstream oFile;oFile.open(m_sFullName.GetBuffer(MAX_PATH),ios::app|ios::binary);oFile.seekp(0,ios::end);//回到文件末尾//写入文件流if (oFile.is_open()){//下面蓝色部分解决了CHAR[]写入的问题,不用再做拷贝了,增加了安全性oFile.write(tmp.GetBuffer(tmp.GetLength()), tmp.GetLength());oFile.write(_T("\r\n"), 2); //写在一起会产生乱码}else{oFile.close();return false;}oFile.close();return true;}/******************************************************************** ********** 写入日志文件* 函数名:WriteLogTxt* 功能写入日志* 说明:* 参数:* 创建人:fjf* 创建时间:2009-09-09* 修改人:* 修改时间:********************************************************************* ********/bool CConLog::WriteLogTxt(CString key, CString time, CString value) {//读写文件全名if (m_sFullName == _T("")){AfxMessageBox("请设置日志保存路径!");return FALSE;}//操作文件try{this->m_sfFile.Open(m_sFullName,CFile::modeCreate |CFile::modeNoTruncate | CFile::modeWrite);m_sfFile.SeekToEnd();this->m_sfFile.WriteString(time + _T("\r\n"));this->m_sfFile.WriteString(value + _T("\r\n"));this->m_sfFile.Close();}catch (CFileException &e){CString error;error.Format(_T("%d"),e.m_cause);AfxMessageBox(_T("无法写入文件!错误码:" + error));return false;}return true;}/******************************************************************** ********** 写入日志文件-C++标准版(UNICODE)* 函数名:WriteLogTxt* 功能写入日志* 说明:* 参数:* 创建人:fjf* 创建时间:2009-09-10* 修改人:* 修改时间:********************************************************************* ********/bool CConLog::WriteLogTxt(CString time, CString value){//定义写入字符数组CString tmp = time + value;//定义输出流ofstream oFile;oFile.open(m_sFullName.GetBuffer(MAX_PATH),ios::app|ios::binary);oFile.seekp(0,ios::end);//回到文件末尾//写入文件流if (oFile.is_open()){//下面蓝色部分解决了CHAR[]写入的问题,不用再做拷贝了,增加了安全性oFile.write(tmp.GetBuffer(tmp.GetLength()), tmp.GetLength());oFile.write(_T("\r\n"), 2); //写在一起会产生乱码}else{oFile.close();return false;}oFile.close();return true;}查看文章VC逐行读写日志文件(TXT)2009-11-03 11:52最近写一个日志读写控件的类,发现VC的CSdioFile的WriteString不能处理中文,虽然把字符集改成多字符形式可以解决这个问题,但这就破坏了程序的兼容性。
CFile和CStdioFile的文件读写使用方法(2009-08-18 10:35:01)标签:杂谈CFile//创建/打开文件CFile file;file.Open(_T("test.txt"),CFile::modeCreate|CFile::modeNoTruncate|CFile::modeRead Write);文件打开模式可组合使用,用“|”隔开,常用的有以下几种:CFile::modeCreate:以新建方式打开,如果文件不存在,新建;如果文件已存在,把该文件长度置零,即清除文件原有内容。
CFile::modeNoTruncate:以追加方式打开,如果文件存在,打开并且不将文件长度置零,如果文件不存在,会抛出异常。
一般与CFile::modeCreate一起使用,则文件不存在时,新建一个文件;存在就进行追加操作。
CFile::modeReadWrite:以读写方式打开文件。
CFile::modeRead:只读。
CFile::modeWrite:只写。
//写入数据CString strValue = "Hello World!";file.Write(strValue,strValue.GetLength());//追加数据file.SeekToEnd(); //将指针移至文件末尾进行追加file.Write(strValue,strValue.GetLength());//关闭文件file.Close();CStdioFileCStdioFile是CFile的派生类,对文件进行流式操作,对于文本文件的读写很有用处,可按行读取写入。
//写入数据CString strValue = "Hello World!";file.WriteString(strValue);//读取数据CString strRead;file.ReadString(strRead);当文件存在多行数据需要逐行读取时,可用函数BOOL CStdioFile::ReadString(CString& rString),当遇到"\n "时读取截断,如果文件未读完,返回true,否则返回false。
目录目录第1章读写文件 (1)1.1 API (1)1.2 低级IO (1)1.2.1 文件序号 (1)1.2.2 文本文件与二进制文件 (1)1.3 流IO (2)1.4 Unicode (3)1.5 低级IO、流IO、API之间的关系 (3)1.6 随机读写 (3)1.7 C++IO流 (4)1.8 MFC (4)1.8.1 CFile (4)1.8.2 CStdioFile (4)1.8.3 CArchive (4)1.9 总结 (4)II第1章读写文件1.1 API使用VC++读写文件,最直接、最高效的方法就是使用 Windows API,如:使用 CreateFile 打开文件,使用 WriteFile 写文件,使用 ReadFile 读文件……Windows 平台下,所有对文件的读写操作,最终都会调用这些 API 函数。
使用 API 的效率最高,对文件读写的控制最强,缺点就是比较复杂,而且代码没有可移植性。
1.2 低级IO为了方便移植 UNIX 的C代码,VC++的C运行时库实现了一套低级IO 函数,如:_open、_write、_read……1.2.1 文件序号_open返回的是一个整数,MSDN上称其为文件句柄(file handle),这与CreateFile返回的文件句柄容易混淆。
为此,本文称_open返回的为文件序号。
VC++中,系统预先打开了三个文件,其文件序号如下表所示流文件序号说明stdin 0 标准输入设备,一般就是键盘stdout 1 标准输出设备,一般就是控制台stderr 2 标准错误输出设备,一般就是控制台也就是说,无需调用_open,可以直接调用_write(1,"abc",3);往控制台输出a bc三个字符。
1.2.2 文本文件与二进制文件读写二进制文件时,不会做任何处理,数据保持原样。
写文本文件时,V1C++会将换行符(即\n,0AH)替换为回车(即\r,0DH)和换行符;读文本文件时,VC++会将\r\n替换为\n,并且在读取到1AH时,认为文件结束。
vc 用函数读写INI配置文件ini文件(即Initialization file),这种类型的文件中通常存放的是一个程序的初始化信息。
ini文件由若干个节(Section)组成,每个Section由若干键(Key)组成,每个Key可以赋相应的值。
读写ini文件实际上就是读写某个的Section中相应的Key的值,而这只要借助几个函数即可完成。
一、向ini文件中写入信息的函数1. 把信息写入系统的win.ini文件BOOL WriteProfileString(LPCTSTR lpAppName, // 节的名字,是一个以0结束的字符串LPCTSTR lpKeyName, // 键的名字,是一个以0结束的字符串。
若为NULL,则删除整个节LPCTSTR lpString // 键的值,是一个以0结束的字符串。
若为NULL,则删除对应的键)2. 把信息写入自己定义的.ini文件BOOL WritePrivateProfileString(LPCTSTR lpAppName, // 同上LPCTSTR lpKeyName, // 同上LPCTSTR lpString, // 同上LPCTSTR lpFileName // 要写入的文件的文件名。
若该ini文件与程序在同一个目录下,也可使用相对//路径,否则需要给出绝度路径。
)如:::WriteProfileString("Test","id","xym");//在win.ini中创建一个Test节,并在该节中创建一个键id,其值为xym::WritePrivateProfileString("Test","id","xym","d:\\vc\\Ex1\\ex1.ini" );//在Ex1目录下的ex1.ini中创建一个Test节,并在该节中创建一个键id,其值为xym//若Ex1.ini文件与读写该文件的程序在同一个目录下,则上面语句也可写为:::WritePrivateProfileString("Test","id","xym",".\\ex1.ini");需要注意的是,C系列的语言中,转义字符'\\'表示反斜线'\'。
C语⾔中对⽂件最基本的读取和写⼊函数C语⾔read()函数:读⽂件函数(由已打开的⽂件读取数据)头⽂件:#include <unistd.h>定义函数:ssize_t read(int fd, void * buf, size_t count);函数说明:read()会把参数fd 所指的⽂件传送count 个字节到buf 指针所指的内存中. 若参数count 为0, 则read()不会有作⽤并返回0. 返回值为实际读取到的字节数, 如果返回0, 表⽰已到达⽂件尾或是⽆可读取的数据,此外⽂件读写位置会随读取到的字节移动.附加说明:如果顺利 read()会返回实际读到的字节数, 最好能将返回值与参数count 作⽐较, 若返回的字节数⽐要求读取的字节数少, 则有可能读到了⽂件尾、从管道(pipe)或终端机读? ?蛘呤莚ead()被信号中断了读取动作.当有错误发⽣时则返回-1, 错误代码存⼊errno 中, ⽽⽂件读写位置则⽆法预期.错误代码:EINTR 此调⽤被信号所中断.EAGAIN 当使⽤不可阻断I/O 时(O_NONBLOCK), 若⽆数据可读取则返回此值.EBADF 参数fd ⾮有效的⽂件描述词, 或该⽂件已关闭.C语⾔write()函数:写⽂件函数头⽂件:#include <unistd.h>定义函数:ssize_t write (int fd, const void * buf, size_t count);函数说明:write()会把参数buf 所指的内存写⼊count 个字节到参数fd 所指的⽂件内. 当然, ⽂件读写位置也会随之移动.返回值:如果顺利write()会返回实际写⼊的字节数. 当有错误发⽣时则返回-1, 错误代码存⼊errno 中.错误代码:EINTR 此调⽤被信号所中断.EAGAIN 当使⽤不可阻断I/O 时 (O_NONBLOCK), 若⽆数据可读取则返回此值.EADF 参数fd ⾮有效的⽂件描述词, 或该⽂件已关闭.。
C语言文件读写函数1. 简介文件读写是计算机编程中常见且重要的操作之一。
在C语言中,提供了一些文件读写函数,可以用来打开、关闭、读取和写入文件。
本文将详细介绍C语言中常用的文件读写函数及其用法。
2. fopen函数fopen函数用于打开文件,并返回一个指向该文件的指针。
它的原型如下:FILE *fopen(const char *filename, const char *mode);•filename:要打开的文件名(包括路径)。
•mode:打开文件的模式,有多种选择,包括:–“r”:只读模式,打开一个已存在的文件。
–“w”:写入模式,创建一个新文件,如果文件已存在则清空文件内容。
–“a”:追加模式,打开一个已存在的文件,并在文件末尾追加内容。
–“rb”、“wb”、“ab”:二进制模式读写,与上述模式类似,但用于二进制文件。
3. fclose函数fclose函数用于关闭一个已打开的文件。
它的原型如下:int fclose(FILE *stream);•stream:指向要关闭的文件的指针。
4. fgetc函数fgetc函数用于从文件中读取一个字符,并把该字符作为函数的返回值。
它的原型如下:int fgetc(FILE *stream);5. fputc函数fputc函数用于把一个字符写入到文件中。
它的原型如下:int fputc(int c, FILE *stream);•c:要写入文件的字符。
•stream:指向要写入的文件的指针。
6. fgets函数fgets函数用于从文件中读取一行内容,并把读取到的内容存储到一个字符串中。
它的原型如下:char *fgets(char *str, int n, FILE *stream);•str:用于存储读取内容的字符串数组。
•n:要读取的最大字符数。
•stream:指向要读取的文件的指针。
7. fputs函数fputs函数用于把一个字符串写入到文件中。
VC6.0编的“文件读写”的两种方式(MFC和基于对话框)软件实验三:基于对话框的MFC程序实现文件读写操作实例一:操作步骤:1、新建“MFC APPWIZARD(EXE)”,选择文件路径,输入文件名,选择应用程序类型为“基本对话框”,按上图添加各控件2、按下表修改各控件的ID号,添加成员函数和消息函数控件的ID号,选择mumber variables面板,单击add variable按钮,添加成员变量,并选择变量类型。
3、写入文件1)在“基于对话框的文件读写Dlg.h”文件中定义变量(粗体字为此处添加的代码)class CMyDlg : public CDialog{// Constructionpublic://定义变量CString strFileName;//文件名CString strFilePath;//文件路径BOOL IsTextFile(CString& rFile);//判断文件类型是否正确CMyDlg(CWnd* pParent = NULL); // standard constructor………}2)双击下压按钮“写入文件”,编写“写入文件”的消息处理函数void CMyDlg::OnButtonWrite() //单击“写入到文件”按钮{// TODO: Add your control notification handler code hereUpdateData(true);CFile file;CFileDialog filedlg(0,//1-文件打开,0-文件另存为".txt|*.*",NULL,OFN_OVERWRITEPROMPT,"文本文件(*.txt)|*.txt|All Files(*.*)|*.*||",NULL);if(filedlg.DoModal()==IDOK)strFileName=filedlg.GetFileName();//获得文件名if(strFileName==""){AfxMessageBox("请输入文件名");return;}file.Open(strFileName,CFile::modeCreate|CFile::modeWrite);//将数据写入文件int length=m_WriteString.GetLength();//获取文件长度file.Write((LPCTSTR)m_WriteString,length);//获取有关文件的信息CString AfxMessageBox("已保存到文件:"+strFileName+"!");//保存结束提示strFilePath=file.GetFilePath();//获得文件的路径file.Close();//关闭文件}4、查看文件路径双击下压按钮“查看文件路径”,编写“查看文件路径”的消息处理函数void CMyDlg::OnButtonFilepath() //查看文件路径{// TODO: Add your control notification handler code herem_FilePath=strFilePath;UpdateData(false);}5、读入文件1)定义判断文件类型是否正确的函数(粗体字为此处添加的代码)class CMyDlg : public CDialog{// Constructionpublic://定义变量CString strFileName;//文件名CString strFilePath;//文件路径BOOL IsT extFile(CString& rFile);//判断文件类型是否正确CMyDlg(CWnd* pParent = NULL); // standard constructor………}2)编写IsTextFile函数BOOL CMyDlg::IsTextFile(CString &rFile)//判断文件类型是否正确{CStringList strList;CString str(rFile);strList.AddHead(".TXT");strList.AddHead(".SYS");strList.AddHead(".BA T");strList.AddHead(".DA T");str=str.Right(4);//文件名的右边四位字符str.MakeUpper();//转换成大写return(strList.Find(str))?TRUE:FALSE;}3)在“基于对话框的文件读写Dlg.cpp”文件开头添加头文件#include "fstream.h"//添加的头文件4)单击下压按钮“读入文件”,编写下压按钮“读入文件”的消息函数void CMyDlg::OnButtonRead(){// TODO: Add your control notification handler code herefstream f1;//定义文件流对象char s[200];CFileDialog filedlg(1,//1-文件打开,0-文件另存为".txt|*.*",NULL,OFN_OVERWRITEPROMPT,"文本文件(*.txt)|*.txt|All Files(*.*)|*.*||",NULL);if(filedlg.DoModal()==IDOK){UpdateData(true);strFileName=filedlg.GetFileName();//获得文件名if(!IsTextFile(strFileName))//判断文件类型是否正确{AfxMessageBox("文件类型不正确");return;}f1.open(strFileName,ios::in|ios::nocreate);while(!f1.eof()){f1.getline(s,255);m_strRead=m_strRead+"\r\n"+s;//添加文件中的文本到编辑框UpdateData(false);}AfxMessageBox(strFileName+"文件读入完毕");//保存结束提示f1.close();//关闭文件流}}6、运行程序1)在写入文件的编辑框中输入内容,单击“写入文件”按钮,并可选择路径保存该文件。
在C语言中,可以使用标准库函数进行文件读写操作。
以下是一些常用的文件读写函数:1. fopen()函数:用于打开一个文件,并返回一个文件指针。
例如:```cFILE *fp = fopen("filename.txt", "r"); // 打开一个名为filename.txt的文件,以只读方式打开```2. fclose()函数:用于关闭一个文件。
例如:```cfclose(fp); // 关闭文件指针fp所指向的文件```3. fscanf()函数:用于从文件中读取格式化数据。
例如:```cint num = fscanf(fp, "%d", &value); // 从文件指针fp所指向的文件中读取一个整数,并存储到变量value中```4. fprintf()函数:用于向文件中写入格式化数据。
例如:```cfprintf(fp, "%d", value); // 将变量value的值写入文件指针fp所指向的文件中```5. fgets()函数:用于从文件中读取一行数据。
例如:```cchar str[100];fgets(str, 100, fp); // 从文件指针fp所指向的文件中读取一行数据,并存储到字符串str中```6. fputs()函数:用于向文件中写入一行数据。
例如:```cfputs("Hello World", fp); // 将字符串"Hello World"写入文件指针fp所指向的文件中```这些函数都是标准库函数,需要在程序开头包含头文件stdio.h。
在实际使用中,需要根据具体情况选择合适的函数进行文件读写操作。
C语言读写文件操作C语言提供了一系列功能强大的文件读写操作函数,使得我们能够方便地读取和写入文件。
本文将详细介绍C语言中的文件读写操作,并给出一些实例。
1.文件指针在C语言中,我们需要使用文件指针来操作文件。
文件指针是一个指向FILE结构体的指针,该结构体定义了文件相关的信息。
我们可以使用以下语句来声明一个文件指针:```cFILE *fp;```2.打开文件在读写文件之前,我们需要先打开文件。
打开文件的函数是```fopen```,它的原型如下:```cFILE *fopen(const char *filename, const char *mode);```其中,```filename``` 是文件名,可以是绝对路径或相对路径;```mode``` 是打开文件的模式,可以是以下几种之一:-"r":只读模式,打开一个已存在的文件,如果文件不存在,则打开失败。
-"w":写入模式,打开一个文件进行写操作,如果文件存在,则清空文件内容。
如果文件不存在,则创建一个新文件。
-"a":追加模式,打开一个文件进行写操作,如果文件存在,则在文件末尾追加内容。
如果文件不存在,则创建一个新文件。
-"r+":读写模式,打开一个已存在的文件进行读写操作。
-"w+":读写模式,打开一个文件进行读写操作,如果文件存在,则清空文件内容。
如果文件不存在,则创建一个新文件。
-"a+":读写模式,打开一个文件进行读写操作,如果文件存在,则在文件末尾追加内容。
如果文件不存在,则创建一个新文件。
以下是一个打开文件的例子:```cFILE *fp;fp = fopen("example.txt", "r");```3.读取文件内容在打开文件之后,我们可以使用```fscanf```函数来读取文件内容。
C语言文件操作学习文件的读写和处理文件是计算机存储数据的一种常见形式,操作文件是编程中非常重要的一部分。
在C语言中,提供了相应的文件操作函数来实现对文件的读写和处理。
本文将介绍C语言中文件操作的基本知识和常用的文件处理函数。
一、文件读写的基本概念在C语言中,使用FILE类型的指针来表示一个文件,在对文件进行读写操作之前,需要先打开文件,读写完成后再关闭文件。
C语言提供了以下几个用于文件操作的函数:1. fopen()函数fopen()函数用于打开一个文件,并返回一个指向FILE类型的指针。
该函数的原型如下:FILE *fopen(const char *filename, const char *mode);其中,filename为指定要打开的文件名,mode为打开文件的模式,常用的模式有:- "r":只读方式打开,文件必须存在;- "w":写入方式打开,如果文件不存在则创建,如果文件存在则清空文件内容;- "a":追加方式打开,如果文件不存在则创建,如果文件存在则在文件末尾追加内容;- "rb"、"wb"、"ab":以二进制方式打开文件。
2. fclose()函数fclose()函数用于关闭一个文件,该函数的原型如下:int fclose(FILE *stream);其中,stream为指向要关闭的文件的指针。
3. fgetc()函数和fputc()函数fgetc()函数用于从指定的文件中读取一个字符,fputc()函数用于向指定的文件中写入一个字符。
它们的原型分别如下:int fgetc(FILE *stream);int fputc(int c, FILE *stream);其中,stream为指向要读写的文件的指针,c为要写入的字符。
二、文件读写示例下面通过一个示例来演示如何使用C语言的文件操作函数进行文件的读写。
VC读写函数详解1.当前文件指针位置获取函数long ftell( FILE *stream );参数:stream 文件指针返回值:当前文件指针的位置实例:#include <stdio.h>FILE *stream;void main( void ){long position;char list[100];if( (stream = fopen( "ftell.c", "rb" )) != NULL ){/* Move the pointer by reading data: */fread( list, sizeof( char ), 100, stream );/* Get position after read: */position = ftell( stream );printf( "Position after trying to read 100 bytes: %ld\n",position );fclose( stream );}}输出:Position after trying to read 100 bytes: 1002.文件的打开函数FILE *fopen( const char *filename, const char *mode );FILE *_wfopen( const wchar_t *filename, const wchar_t *mode );参数:filename 文件的名称mode 打开文件的模式返回值:成功的打开文件的话返回文件的指针否则返回NULL表示打开文件错误注:"r"只读方式打开"w"以写入方式打开"a"从文件的尾端写入数据,要是文件不存在则创建后写入数据"r+"以读写方式打开(文件必须存在)"w+"打开一个可以读写的文件,如果该文件存在则覆盖写入"a+"打开文件并追加写入源于<stdio.h>实例:#include <stdio.h>FILE *stream, *stream2;void main( void ){int numclosed;/* Open for read (will fail if file "data" does not exist) */if( (stream = fopen( "data", "r" )) == NULL )printf( "The file 'data' was not opened\n" );elseprintf( "The file 'data' was opened\n" );/* Open for write */if( (stream2 = fopen( "data2", "w+" )) == NULL )printf( "The file 'data2' was not opened\n" );elseprintf( "The file 'data2' was opened\n" );/* Close stream */if( fclose( stream ) )printf( "The file 'data' was not closed\n" );/* All other files are closed: */numclosed = _fcloseall( );printf( "Number of files closed by _fcloseall: %u\n", numclosed ); }输出:The file 'data' was openedThe file 'data2' was openedNumber of files closed by _fcloseall: 13.文件读取函数size_t fread( void *buffer, size_t size, size_t count, FILE *stream ) 参数: buffer 文件读取缓冲区 size 读取数据的类型 count 读取数据的个数stream 文件指针返回值:实际读取的数据个数源于<stdio.h>例子:FILE* fp;char* buffer=new char[1024];long realLength=fread(buffer,sizeof(char),1024,fp);////处理过程//delete buffer;fclose(fp);4.文件的写入函数size_t fwrite( const void *buffer, size_t size, size_t count, FILE*stream );参数: buffer 所要写入文件的缓冲区 size 写入数据的类型 count 写入数据的个数 stream 文件指针返回值:实际写入的数据个数源于<stdio.h>实例:#include <stdio.h>void main( void ){FILE *stream;char list[30];int i, numread, numwritten;/* Open file in text mode: */if( (stream = fopen( "fread.out", "w+t" )) != NULL ){for ( i = 0; i < 25; i++ )list[i] = (char)('z' - i);/* Write 25 characters to stream */numwritten = fwrite( list, sizeof( char ), 25, stream );printf( "Wrote %d items\n", numwritten );fclose( stream );}elseprintf( "Problem opening the file\n" );if( (stream = fopen( "fread.out", "r+t" )) != NULL ){/* Attempt to read in 25 characters */numread = fread( list, sizeof( char ), 25, stream );printf( "Number of items read = %d\n", numread );printf( "Contents of buffer = %.25s\n", list );fclose( stream );}elseprintf( "File could not be opened\n" );}输出:Wrote 25 itemsNumber of items read = 25Contents of buffer = zyxwvutsrqponmlkjihgfedcb5.文件指针搜索函数int fseek( FILE *stream, long offset, int origin )参数: stream 文件指针 offset 从当前指针开始的偏移量 origin 文件指针当前的位置返回值:成功返回0 否则返回非零值注:指针移动的时候是按字节移动的,要是成功的话文件的指针将指向当前搜索到的位置origin 可以的取值在 stdio.h已经定义如下:SEEK_CUR当前的文件指针SEEK_END文件结束SEEK_SET文件的开始源于<stdio.h>实例:#include <stdio.h>void main( void ){FILE *stream;char line[81];int result;stream = fopen( "fseek.out", "w+" );if( stream == NULL )printf( "The file fseek.out was not opened\n" );else{fprintf( stream, "The fseek begins here: ""This is the file 'fseek.out'.\n" );result = fseek( stream, 23L, SEEK_SET);if( result )printf( "Fseek failed" );else{printf( "File pointer is set to middle of first line.\n" ); fgets( line, 80, stream );printf( "%s", line );}fclose( stream );}}输出:File pointer is set to middle of first line.This is the file 'fseek.out'.6.按固定的格式写入数据函数int fprintf( FILE *stream, const char *format [, argument ]...)int fwprintf( FILE *stream, const wchar_t *format [, argument ]...) 参数:stream 文件指针format 按照一定的格式argument 可选参数列表返回值:fprintf 返回实际写入的字节数.fwprintf返回实际写入的wchar_t 的字节数源于<stdio.h>实例:#include <stdio.h>#include <process.h>FILE *stream;void main( void ){int i = 10;double fp = 1.5;char s[] = "this is a string";char c = '\n';stream = fopen( "fprintf.out", "w" );fprintf( stream, "%s%c", s, c );fprintf( stream, "%d\n", i );fprintf( stream, "%f\n", fp );fclose( stream );system( "type fprintf.out" );}输出:this is a string101.5000007.按固定的格式读入数据函数int fscanf( FILE *stream, const char *format [, argument ]... )int fwscanf( FILE *stream, const wchar_t *format [, argument ]... ) 参数:stream 文件指针format 按照一定的格式argument 可选参数列表返回值:fscanf 返回实际读入的字节数.fwscanf返回实际读入的wchar_t 的字节数如果返回值为 0 则说明没有被赋值如果有文件结束或是异常的IO错误时返回 EOF(宏定义)源于<stdio.h>实例:#include <stdio.h>FILE *stream;void main( void ){long l;float fp;char s[81];char c;stream = fopen( "fscanf.out", "w+" );if( stream == NULL )printf( "The file fscanf.out was not opened\n" );else{fprintf( stream, "%s %ld %f%c", "a-string",65000, 3.14159, 'x' );/* Set pointer to beginning of file: */fseek( stream, 0L, SEEK_SET );/* Read data back from file: */fscanf( stream, "%s", s );fscanf( stream, "%ld", &l );fscanf( stream, "%f", &fp );fscanf( stream, "%c", &c );/* Output data read: */printf( "%s\n", s );printf( "%ld\n", l );printf( "%f\n", fp );printf( "%c\n", c );fclose( stream );}}输出:a-string650003.141590X8.文件指针的定位和获取int fsetpos( FILE *stream, const fpos_t *pos );int fgetpos( FILE *stream, const fpos_t *pos );参数:stream 目标文件指针pos 文件指针的位置返回值:设置指针位置成功的话fsetpos返回0 否则返回一个非零的数获得指针位置成功的话fgetpos返回0 否则返回一个非零的数源于<stdio.h>实例:#include <stdio.h>void main( void ){FILE *stream;fpos_t pos;char buffer[20];if( (stream = fopen( "fgetpos.c", "rb" )) == NULL )printf( "Trouble opening file\n" );else{/* Read some data and then check the position. */fread( buffer, sizeof( char ), 10, stream );if( fgetpos( stream, &pos ) != 0 )printf( "fgetpos error" );else{fread( buffer, sizeof( char ), 10, stream );printf( "10 bytes at byte %I64d: %.10s\n", pos, buffer ); }/* Set a new position and read more data */pos = 140;if( fsetpos( stream, &pos ) != 0 )printf( "fsetpos error" );fread( buffer, sizeof( char ), 10, stream );printf( "10 bytes at byte %I64d: %.10s\n", pos, buffer );fclose( stream );}}输出:10 bytes at byte 10: .C: This p10 bytes at byte 140: .C and the9.文件指针重新定位到开始void rewind( FILE *stream )参数:stream 文件指针返回值:无注:执行完本函数后,文件的指针将返回到开始位置实例:#include <stdio.h>void main( void ){FILE *stream;int data1, data2;data1 = 1;data2 = -37;if( (stream = fopen( "rewind.out", "w+" )) != NULL ){fprintf( stream, "%d %d", data1, data2 );printf( "The values written are: %d and %d\n", data1, data2 ); rewind( stream );fscanf( stream, "%d %d", &data1, &data2 );printf( "The values read are: %d and %d\n", data1, data2 );fclose( stream );}}输出:The values written are: 1 and -37The values read are: 1 and -3710.取得文件指针所指的行char *fgets( char *string, int n, FILE *stream );int fputs( const char *string, FILE *stream );参数:fgets 的string 保存到的字符串缓冲,而fputs 的string 表示要写入的字符串n表示从文件中读出的字符串不超过 n-1个字符,在读入的最后一个字符后加上串结束标志'\0'stream 文件指针返回值:成功的话返回字符数组的首地址否则返回NULL源于<stdio.h>实例:#include <stdio.h>void main( void ){FILE *stream;char line[100];if( (stream = fopen( "fgets.c", "r" )) != NULL ){if( fgets( line, 100, stream ) == NULL)printf( "fgets error\n" );elseprintf( "%s", line);fclose( stream );}fputs( "Hello world from fputs.\n", stdout );}输出:This program uses fgets to displayHello world from fputs.11.关闭文件函数int _fcloseall( void )int fclose( FILE *stream )参数:stream 文件指针返回值:fclose成功关闭返回 0 否则返回EOF 表示错误_fcloseall 成功返回总共关闭的文件数否则的话返回EOF 表示错误实例:#include <stdio.h>FILE *stream, *stream2;void main( void ){int numclosed;/* Open for read (will fail if file "data" does not exist) */if( (stream = fopen( "data", "r" )) == NULL )printf( "The file 'data' was not opened\n" );elseprintf( "The file 'data' was opened\n" );/* Open for write */if( (stream2 = fopen( "data2", "w+" )) == NULL )printf( "The file 'data2' was not opened\n" );elseprintf( "The file 'data2' was opened\n" );/* Close stream */if( fclose( stream ) )printf( "The file 'data' was not closed\n" );/* All other files are closed: */numclosed = _fcloseall( );printf( "Number of files closed by _fcloseall: %u\n", numclosed ); }输出:The file 'data' was openedThe file 'data2' was openedNumber of files closed by _fcloseall: 1完。