void CMyfileDlg::OnWrite()
{
//单字符串读写 包含中文和英文,接着增加多字符串
CFile file;
file.Open("1.bin",CFile::modeCreate | CFile::modeWrite | CFile::typeBinary);
int strlength =0;
CString str="单字符串读写 包含中文和英文00000asdasdw";
strlength = str.GetLength();
file.Write(&strlength,sizeof(int));
file.Write(str.GetBuffer(strlength),strlength);
str.ReleaseBuffer();
CString str1="单字符串读写 包含中文和英文1111111asdasdw";
strlength = str1.GetLength();
file.Write(&strlength,sizeof(int));
file.Write(str1.GetBuffer(strlength),strlength);
str1.ReleaseBuffer();
file.Close();
}
void CMyfileDlg::OnRead()
{
//单字符串读写 包含中文和英文,接着增加多字符串
CFile file;
file.Open("1.bin", CFile::modeRead|CFile::typeBinary);
CFile *pfile=&file;
while(pfile!=NULL)
{
int strlength =0;
CString str;
file.Read(&strlength,sizeof(int));
file.Read(str.GetBuffer(strlength),strlength);
MessageBox(str);
str="";
file.Read(&strlength,sizeof(int));
file.Read(str.GetBuffer(strlength),strlength);
MessageBox(str);
str.ReleaseBuffer();}
file.Close();
}
现象:在执行读的操作的时候,MessageBox正确显示了写入的两个字符串,但是接下来就弹出空对话框,且是死循环。
请问代码有什么问题。在CS同日那个进行读操作,需要在串的末尾加上'\0'吗
{
//单字符串读写 包含中文和英文,接着增加多字符串
CFile file;
file.Open("1.bin",CFile::modeCreate | CFile::modeWrite | CFile::typeBinary);
int strlength =0;
CString str="单字符串读写 包含中文和英文00000asdasdw";
strlength = str.GetLength();
file.Write(&strlength,sizeof(int));
file.Write(str.GetBuffer(strlength),strlength);
str.ReleaseBuffer();
CString str1="单字符串读写 包含中文和英文1111111asdasdw";
strlength = str1.GetLength();
file.Write(&strlength,sizeof(int));
file.Write(str1.GetBuffer(strlength),strlength);
str1.ReleaseBuffer();
file.Close();
}
void CMyfileDlg::OnRead()
{
//单字符串读写 包含中文和英文,接着增加多字符串
CFile file;
file.Open("1.bin", CFile::modeRead|CFile::typeBinary);
CFile *pfile=&file;
while(pfile!=NULL)
{
int strlength =0;
CString str;
file.Read(&strlength,sizeof(int));
file.Read(str.GetBuffer(strlength),strlength);
MessageBox(str);
str="";
file.Read(&strlength,sizeof(int));
file.Read(str.GetBuffer(strlength),strlength);
MessageBox(str);
str.ReleaseBuffer();}
file.Close();
}
现象:在执行读的操作的时候,MessageBox正确显示了写入的两个字符串,但是接下来就弹出空对话框,且是死循环。
请问代码有什么问题。在CS同日那个进行读操作,需要在串的末尾加上'\0'吗
那pfile估计永远是一个不确定值了...
while(pfile!=NULL)
{
}//用这个循环是错误的,判断条件永远有效.所以是死循环.
int strlength =0;
CString str;
file.Read(&strlength,sizeof(int));
file.Read(str.GetBuffer(strlength),strlength);
MessageBox(str);
str="";
file.Read(&strlength,sizeof(int));
file.Read(str.GetBuffer(strlength),strlength);
MessageBox(str);
str.ReleaseBuffer();}
file.Close(); 只需要这段代码就可以成功地读出文件的内容.再加上上面的错误的while循环,一方面文件句柄已经关闭,一方面读取文件的指针已经移到文件末尾无数据可读,所以会出现死循环+空的MessageBox
代码是要实现很多字符串的读写,举两个例子而已,而不是仅仅读写两个字符串。
{
//单字符串读写 包含中文和英文,接着增加多字符串
CFile file;
file.Open("1.bin", CFile::modeRead ¦CFile::typeBinary);
CFile *pfile=&file;
int count=0;
do
{
int strlength =0;
CString str;
count=file.Read(&strlength,sizeof(int));
count=file.Read(str.GetBuffer(strlength),strlength);
MessageBox(str);
str.ReleaseBuffer();
} while(Count >0)
file.Close();
另外能否举一个用文件指针来实现的例子吗
FILE* fp = NULL;
// Open file
fp = fopen(strFileName, "rb");
if (fp == NULL)
{
return
}
//
#define MAX_DATABUF_LEN 1024
char szDataBuf[MAX_DATABUF_LEN];
size_t dwItem = 0; while (true)
{
dwItem = fread(szDataBuf, sizeof(char), MAX_DATABUF_LEN, fp);
if (dwItem < MAX_DATABUF_LEN)
{
break;
} }
// Close file
fclose(fp);
CFile file;
file.Open("1.bin", CFile::modeRead |CFile::typeBinary);
CFile *pfile=&file;
ULONGLONG filelength =file.GetLength();
while(filelength>0)
{
int strlength =0;
CString str=""; ;
file.Read(&strlength,sizeof(int));
file.Read(str.GetBuffer(strlength),strlength);
MessageBox(str);
file.Read(&strlength,sizeof(int));
file.Read(str.GetBuffer(strlength),strlength);
MessageBox(str);
str.ReleaseBuffer();
filelength=filelength-file.GetPosition(); }
file.Close();