读书人

c++中FILE*读文件的有关问题

发布时间: 2013-10-24 18:27:24 作者: rapoo

c++中FILE*读文件的问题
先看代码吧
FILE *p;
CString readfilename=_T("E:\\abc_XXX.dat");
for(int i=0;i<2;i++)
{
readfilename.format(TEXT("E:\\abc_03%d.dat"),i);
fpr=fopen((char*)(LPCTSTR)readfilename,"rb");
}
这里fpr==NULL,然后我调到程序里面,发现readfilename只是个E,不知道为什么,然后输出
wprintf(readfilename);的时候readfilename=E:\abc_000.dat。
这个不知道为什么。求原因。
谢谢~ c++?FILE*
[解决办法]
因为你的工程配置为多字节的,而printf是按照单字节来解析,这样会误把多字节中正常的0x00当成字符串的结束符。

引用:
先看代码吧
FILE *p;
CString readfilename=_T("E:\\abc_XXX.dat");
for(int i=0;i<2;i++)
{
readfilename.format(TEXT("E:\\abc_03%d.dat"),i);
fpr=fopen((char*)(LPCTSTR)readfilename,"rb");
}
这里fpr==NULL,然后我调到程序里面,发现readfilename只是个E,不知道为什么,然后输出
wprintf(readfilename);的时候readfilename=E:\abc_000.dat。
这个不知道为什么。求原因。
谢谢~

[解决办法]
语言单纯点不好么?
又是C 又是c++

FILE *Fp = fopen("E:\\abc_XXX.dat", "rb");
if(Fp == NULL)
{
printf("open failed:%s\n", strerror(errno));
return -1;
}
fread(buf, 1, 100,Fp);

[解决办法]
这样处理吧:
_T =TEXT

//VC:

涉及字符串的函数,有3种版本;
其中第2,第3是实现版;
第1个是个宏,
根据字符串的实现版本的不同,
被定义为第2个,或者第3个
//通用版(?其实有点表示怀疑的) MBCS 版 ,UNICODE版

字符 TCHAR char , wchar_t
字符串 LPTSTR==TCHAR*,LPCTSTR ==const TCHAR *, char *,const char * , wchar_t *,const wchar_t *
对应函数 _tfopen ---- fopen , wfopen

FILE *p;
CString readfilename
for(int i=0;i<2;i++)
{
CString temp = readfilename.format(_T("E:\\abc_03%d.dat"),i);
fpr=_tfopen((LPCTSTR)temp,_T("rb"));
.........
}

不过,CString,一般和 CFile,CStdioFile 配合使用。
很少见到,MFC 程序,使用 C流,或者C++流的。

PS:
MFC 不是很待见,C,C++流。

[解决办法]
_fputts(CString,FILE *);

读书人网 >C++

热点推荐