文件读写,到底怎么了?

mapping_ping 2007-09-03 04:52:08
生成test文件,打开乱码:
) #H ? 刧 酛 l= ? 畆 Ri 恄 I 駇 馴 籄 ? ? ? ? ? < 噡 9 > $ ^0
D I M 稭 G 轙 ? - M 萂 Cd 籪 婤 ? p ] Zz }v E 8 %; ]n ? 薱 黭 ? ? EN ;2 "

在fopen时,src 0x1027c898 {_ptr=0x00000000 <Bad Ptr> _cnt=0 _base=0x00000000 <Bad Ptr> ...}
将test文件分别写到四个文件中,打开为:
屯屯屯屯屯屯屯屯屯屯屯屯屯屯屯屯屯屯屯屯屯屯屯屯屯屯屯屯屯屯屯屯屯屯屯屯屯屯屯屯屯屯屯屯屯屯屯屯屯屯屯屯屯屯屯屯屯屯屯屯屯屯屯屯屯屯屯屯屯屯屯屯屯屯屯屯屯屯屯屯屯屯屯屯屯屯屯屯屯
是怎么回事啊? 请高手指点下,不胜感激!

...全文
494 18 打赏 收藏 转发到动态 举报
写回复
用AI写文章
18 条回复
切换为时间正序
请发表友善的回复…
发表回复
mapping_ping 2007-09-04
  • 打赏
  • 举报
回复
fread(data,1,sizeofpart,in);
TRACE("data is :%s\n",data);
打印出来的结果是:
data is :屯屯屯屯屯屯屯屯屯屯屯屯屯屯屯屯屯屯屯屯屯屯屯屯屯屯屯屯屯屯屯屯屯屯屯屯屯
说明没有读到吧 不知道什么原因 ?
mapping_ping 2007-09-04
  • 打赏
  • 举报
回复
bool copy_compare_part(int m_part,FILE *in,FILE *out)
{
char *data = new char[sizeofpart + 10];

if(fseek(in,m_part*sizeofpart,SEEK_SET) == -1)
return false;
fread(data,1,sizeofpart,in);
fwrite(data,1,sizeofpart,out);

delete []data;
return true;
}
mapping_ping 2007-09-04
  • 打赏
  • 举报
回复

char srcFile[MAX_PATH];
char dstFile[MAX_PATH];
char dstFilePath[MAX_PATH];

CString strText;
CComboBox* pComb = (CComboBox*)GetDlgItem(IDC_COMBO1);
int nSel = pComb->GetCurSel();
pComb->GetLBText(nSel,strText);
sprintf(srcFile, "%s\\", strText);

pComb = (CComboBox*)GetDlgItem(IDC_COMBO2);
nSel = pComb->GetCurSel();
pComb->GetLBText(nSel,strText);
sprintf(dstFilePath, "%s\\", strText);

//generate test pattern file
sprintf(srcFile, "%s\\test", srcFile);
FILE *src = fopen(srcFile, "wrb");

if (src)
{
msg.Format("Create %s\r\n", srcFile);
TestLog(strLog,msg.GetBuffer());

for (int i=0; i < sizeofpart; i++)
{
int x = rand();
fwrite(&x, sizeof(int), 1, src);
}
fclose(src);
}
else
{
msg.Format("Create %s failed!\r\n", srcFile);
TestLog(strLog,msg.GetBuffer());
return false;
}

int i;
for(i=0;i < 4;i++)
{
sprintf(dstFile,"%s\\%d",dstFilePath,i+1);
FILE *part_File = fopen(dstFile,"wrb");
if (!(part_File ))
{
msg.Format("Open %s Fail\r\n", dstFile);
TestLog(strLog,msg.GetBuffer());
}

msg.Format("Open %s\r\n", dstFile);
TestLog(strLog,msg.GetBuffer());

rewind(part_File);

//Write to four files
if(fseek(src,i*sizeofpart,SEEK_SET) == -1)
return false;
if(!copy_compare_part(i,src,part_File))
{
msg.Format("Write From %s To %s Fail\r\n", srcFile,dstFile);
TestLog(strLog,msg.GetBuffer());
break;
}

msg.Format("Write From %s To %s Success\r\n",srcFile,dstFile);
TestLog(strLog,msg.GetBuffer());

//fclose(part_File);
}

if(i<4)
printf("Fail!\n");
lifurong 2007-09-04
  • 打赏
  • 举报
回复
建议把完整一点的代码贴上来。
lifurong 2007-09-04
  • 打赏
  • 举报
回复
srcFile是什么变量,没有声明过呀?
另外,写入文件的时候,一个字节一个字节的写,但是当你读出来的时候,(咱们的系统大都是中文的)如果系统认为是unicode字符,就会两个字节一读。建议你查一下unicode和单字节字符之间的区别。还有,c++好像也可以直接支持unicode(不确定,猜测)?
mapping_ping 2007-09-04
  • 打赏
  • 举报
回复
MARK????
herman~~ 2007-09-04
  • 打赏
  • 举报
回复
MARK
mapping_ping 2007-09-04
  • 打赏
  • 举报
回复
先说说这个:在fopen时,设置断点到if (src = fopen(srcFile, "wr")),但是Bad Ptr, 是怎么回事啊
src0x1027c898 {_ptr=0x00000000 <Bad Ptr> _cnt=0 _base=0x00000000 <Bad Ptr> ...}
hjon 2007-09-04
  • 打赏
  • 举报
回复
是不是文件是以unicode形式保存的,在读文件的时候先判断前两个BYTE是不是FF和FE,如果是就用宽字符来读取文件.
yixiao386 2007-09-04
  • 打赏
  • 举报
回复
可能是你内存读写的区域没控制好
mapping_ping 2007-09-04
  • 打赏
  • 举报
回复
郁闷 !
M_S_D_N 2007-09-04
  • 打赏
  • 举报
回复
文件每次write之间必须flush,否则,不可预料.
mapping_ping 2007-09-03
  • 打赏
  • 举报
回复
生成test文件,打开乱码:
) #H ? 刧 酛 l= ? 畆 Ri 恄 I 駇 馴 籄 ? ? ? ? ? < 噡 9 > $ ^0
D I M 稭 G 轙 ? - M 萂 Cd 籪 婤 ? p ] Zz }v E 8 %; ]n ? 薱 黭 ? ? EN ;2 "

在fopen时,src 0x1027c898 {_ptr=0x00000000 <Bad Ptr> _cnt=0 _base=0x00000000 <Bad Ptr> ...}
将test文件分别写到四个文件中,打开为:
屯屯屯屯屯屯屯屯屯屯屯屯屯屯屯屯屯屯屯屯屯屯屯屯屯屯屯屯屯屯屯屯屯屯屯屯屯屯屯屯屯屯屯屯屯屯屯屯屯屯屯屯屯屯屯屯屯屯屯屯屯屯屯屯屯屯屯屯屯屯屯屯屯屯屯屯屯屯屯屯屯屯屯屯屯屯屯屯屯
是怎么回事啊? 请高手指点下,不胜感激!
mapping_ping 2007-09-03
  • 打赏
  • 举报
回复
if(!copy_compare_part(i,src,part_File))
src没有重定位过
怎么重定位啊 麻烦你说详细点 谢谢了!
taodm 2007-09-03
  • 打赏
  • 举报
回复
if(!copy_compare_part(i,src,part_File))
src没有重定位过
mapping_ping 2007-09-03
  • 打赏
  • 举报
回复
"wrb"模式试了,还是一样 郁闷 !
taodm 2007-09-03
  • 打赏
  • 举报
回复
fopen的时候都"wrb"模式,再试。
mapping_ping 2007-09-03
  • 打赏
  • 举报
回复
bool copy_compare_part(int m_part,FILE *in,FILE *out)
{
char *data = new char[sizeofpart + 10];

if(fseek(in,m_part*sizeofpart,SEEK_SET) == -1)
return false;
fread(data,1,sizeofpart,in);
fwrite(data,1,sizeofpart,out);

delete []data;
return true;
}

bool Copy_Compare_File()
{
//generate test pattern file
FILE *src;
sprintf(srcFile, "E:\\test");
if (src = fopen(srcFile, "wr"))
{
msg.Format("Create %s\r\n", srcFile);
TestLog(strLog,msg.GetBuffer());

for (int i=0; i < sizeofpart; i++)
{
int x = rand();
fwrite(&x, sizeof(int), 1, src);
}
//fclose(src);
}
else
{
return false;
}

FILE *part_File;
int i;
for(i=0;i < 4;i++)
{
sprintf(dstFile,"F:\\%d",i+1);
if (!(part_File = fopen(dstFile,"wr")))
{
return false;
}

rewind(part_File);

//Write to four files
if(!copy_compare_part(i,src,part_File))
{
break;
}

msg.Format("Write From %s To %s Success\r\n",srcFile,dstFile);
TestLog(strLog,msg.GetBuffer());

//fclose(part_File);
}

if(i<4)
printf("Fail!\n");

return true;
}

64,637

社区成员

发帖
与我相关
我的任务
社区描述
C++ 语言相关问题讨论,技术干货分享,前沿动态等
c++ 技术论坛(原bbs)
社区管理员
  • C++ 语言社区
  • encoderlee
  • paschen
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
  1. 请不要发布与C++技术无关的贴子
  2. 请不要发布与技术无关的招聘、广告的帖子
  3. 请尽可能的描述清楚你的问题,如果涉及到代码请尽可能的格式化一下

试试用AI创作助手写篇文章吧