您的位置:首页 > 其它

文件操作系列之一——(C Run-Time Library)

2010-07-13 07:12 127 查看
现在要做一个东西出来,因为涉及的知识面比较广,所以需要系统的把知识整理一下,刚好用到文件操作这一块,就整理了一下相关的要点。

操作文件的方式很多,这里重点介绍几个,本次介绍C Run-Time Library的文件操作方式。

C Run-Time Library中操作文件的方式又有两种,一种是直接使用库的API来进行;一种是使用FILE的I/O标准流操作来进行。下面分别说明。

一使用C Run-Time Library库的API来操作文件
。因为C Run-Time Library是过程语言,所以没有类的概念,里面的函数大多是过程的。如下面的例子:

读文件:

]char buffer[60000];
int fh;
unsigned int nbytes = 60000, bytesread;
/* Open file for input: */
if( _sopen_s( &fh, "1.txt", _O_RDONLY, _SH_DENYNO, 0 ) )
{
perror( "open failed on input file" );
exit( 1 );
}
/* Read in input: */
if( ( bytesread = _read( fh, buffer, nbytes ) ) <= 0 )
perror( "Problem reading file" );
else
printf( "Read %u bytes from file/n", bytesread );
_close( fh );


写文件:

]int         fileHandle = 0;
unsigned    bytesWritten = 0;
char buffer[] = "This is a test of '_write' function";
if ( _sopen_s(&fileHandle, "write.o", _O_RDWR | _O_CREAT,
_SH_DENYNO, _S_IREAD | _S_IWRITE) )
return;
if (( bytesWritten = _write( fileHandle, buffer, sizeof( buffer ))) == -1 )
{
switch(errno)
{
case EBADF:
perror("Bad file descriptor!");
break;
case ENOSPC:
perror("No space left on device!");
break;
case EINVAL:
perror("Invalid parameter: buffer was NULL!");
break;
default:
// An unrelated error occured
perror("Unexpected error!");
}
}
else
{
printf_s( "Wrote %u bytes to file./n", bytesWritten );
}
_close( fileHandle );


二使用标准I/O的FILE流操作文件。
其实这种方式也属于C Run-Time Library库函数,不过它引入新的结构FILE,操作处理上面要比直接使用库函数简单一些。如下面的例子:

读文件:

]char filename[50];
cout<<"Pleast input the file name you want to Read:/n";
cin>>filename;
FILE *stream;
char list[30];
int numread;
if( fopen_s( &stream, filename, "r+t" ) == 0 )
{
// 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 );
}
else
printf( "File could not be opened/n" );


写文件:

]char filename[50];
cin>>filename;
FILE *stream;
char list[30];
int  i, numwritten;
// Open file in text mode:
if( fopen_s( &stream, filename, "w+t" ) == 0 )
{
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 );
}
else
printf( "Problem opening the file/n" );


代码很简单,不用太多解释,细节可参考MSDN上面的函数说明,也可参考微软的C Run-Time Library函数参考手册(后附做好的手册下载)。

使用Run-Time Library函数来操作文件是非常有效率的,它就如C/C++语言的优势一样,依赖语言而脱离系统,而且有比较高的内存利用率和较低的时间花费。

可缺点也是一样的,安全性低,直接操作内存的复杂度高。

对于使用Run-Time Library感兴趣的,可参考微软《C Run-Time Library函数参考手册》。

附,本系列示例代码
,该代码在VS2008+XPsp3下测试通过。

下一篇,开始讲述面向对象方式的文件操作方式
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: