读书人

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

发布时间: 2012-03-05 11:54:02 作者: rapoo

读写文件时的错误检查问题
我用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 ");
}
[解决办法]
严格来讲是这样的,每次都要进行判断,但是你可以组织一下你代码的逻辑,让其更加精炼一点。不要因为麻烦而不去做。

读书人网 >C语言

热点推荐