首页 诗词 字典 板报 句子 名言 友答 励志 学校 网站地图
当前位置: 首页 > 教程频道 > 开发语言 > C语言 >

读写文件时的异常检查有关问题

2012-03-05 
读写文件时的错误检查问题我用C语言或C++读取文件时,是否需要每一次读写都要检查正确性呢,如果读很多次,岂

读写文件时的错误检查问题
我用C语言或C++读取文件时,是否需要每一次读写都要检查正确性呢,如果读很多次,岂不是要增加许多代码。大家有没有什么好的建议。
下面是我的一段代码,显示非常繁琐:

        hFile   =   fopen(pFileName,   "rb ");
        if(NULL   ==   hFile)
        {
                printf( "Open   file   fail!\n ");
                return   FAIL;
        }

        size   =   fgetsize(hFile);
        if(size   <   0)
        {
                printf( "get   file   size   fail!\n ");
                fclose(hFile);
                return   FAIL;
        }

        if(0   ==   size)
        {
                printf( "void   file\n ");
                fclose(hFile);
                return   SUCCESS;
        }

        /*for   other   ebook*/
        if(bufSize   >   0)
                size   =   bufSize;

        if(size   >   TEXTBUF_MAXSIZE)
        {
                printf( "too   large   file!\n ");
                size   =   TEXTBUF_MAXSIZE-1;
        }

        pBuffer   =   (UINT8*)malloc(size+1);
        if(NULL   ==   pBuffer)
        {
                printf( "not   enough   memory!   \n ");
                return   FAIL;
        }

        RetCount   =   fread(pBuffer,   1,   size,   hFile);
        if(RetCount   <   size)
        {
                printf( "read   file   fail\n ");
                free(pBuffer);
                fclose(hFile);
                return   FAIL;
        }
        fclose(hFile);

[解决办法]
程序的逻辑要严密
异常处理要全面
[解决办法]
hFile = fopen(pFileName, "rb ");
pFileName 这个文件在哪个目录
[解决办法]
取决于你想构建多么健壮的系统。
一般情况下,打开文件后就无需再作太多检查了。
[解决办法]
flttchhy() ( ) 信誉:100

但如此代码似乎不太好看
-----------------------------------


代码好不好看无所谓 可读性强就行了
必要的出错检测是需要的
[解决办法]
格式化读文件的fscanf也许需要判断。其它的,你自己想想吧^-^
[解决办法]
其实象这种可以作成单出口,虽然要使用goto,但用用无妨

比如改成

#define FAIL_EXIT(c, desc) if (!(c)) {printf(desc); goto Exit_f; }


bool fun()
{

bool bResult = false;

hFile = fopen(pFileName, "rb ");
FAIL_EXIT(hFile, "Open file fail!\n ");

size = fgetsize(hFile);
FAIL_EXIT(size < 0, "get file size fail!\n ");

...
...

bResult = true;
Exit_f :
return bResult;
}
[解决办法]
我也用跟你差不多的方法
比如:
if((FileName = fopen( "XXXX.xxx ", "r "))==NULL)
{
printf( "The \ "XXXX.xxx\ " File Can 't Be Read!\n ");
}
[解决办法]
严格来讲是这样的,每次都要进行判断,但是你可以组织一下你代码的逻辑,让其更加精炼一点。不要因为麻烦而不去做。

热点排行