文件操作符创建成功,第一次可以写数据,第二次写数据失败

tree_go 2012-12-24 07:48:57
上图:


这里创建了文件句柄fp,我第一次点击按钮执行该函数,选择了一个文件。第二次点击按钮,执行该函数,fp创建成功了,但是写数据失败。
。。。。
将fp 弄成全局的,写数据是没有问题的。
请知道能给我解决下。 谢谢。。。
...全文
136 7 打赏 收藏 转发到动态 举报
写回复
用AI写文章
7 条回复
切换为时间正序
请发表友善的回复…
发表回复
jordancart 2012-12-27
  • 打赏
  • 举报
回复
楼主要注意下代码风格了。
赵4老师 2012-12-26
  • 打赏
  • 举报
回复
摒弃fstream 使用FILE *
tree_go 2012-12-26
  • 打赏
  • 举报
回复
@xumaojun 非常感谢你,问题解决了。我上网查了下,是这个问题。 这是我在网上找的解决方案: 使用GetOpenFileName和GetSaveFileName函数会改变当前目录的问题 如题,你在使用这两个函数打开,保存文件时,如果在非当前目录下操作的话,你的当前目录就会被改变了,这会导致,默认当前目录下的文件读写出现意想不到的问题。 解决方法,使用OFN_NOCHANGEDIR,但msdn里说 Windows NT 4.0/2000/XP: This flag is ineffective for GetOpenFileName. 我在XP下试,结果为effective。 为了更保险些,在调用这两个函数前保存当前目录,调用完后再用SetCurrentDirectory恢复。
tree_go 2012-12-26
  • 打赏
  • 举报
回复
@xumaojun 能说详细些吗? 工作目录变了,具体指的什么呢? 我不太懂MFC,不好意思了。
xumaojun 2012-12-26
  • 打赏
  • 举报
回复
打开文件后是不是工作目录变了呢,我原来碰到过打开文件后,工作目录变了,调试了好久
tree_go 2012-12-26
  • 打赏
  • 举报
回复
@zhao4zhong1 换成FILE * 也不行。貌似不是fstream 的问题。我将所有的其他操作全屏蔽了,只留下文件操作,是可以的。 看来是里面的内容影响了它,但还是没有找到问题的根源。 void CMusic_playerDlg::OnButtonOpen() { OPENFILENAME open_file; char *p=NULL; static int i=1,j=0; char path1[256]=""; FILE *fp=NULL; fp=fopen(filename,"a"); /* ZeroMemory(&open_file,sizeof(open_file)); open_file.lStructSize=sizeof(open_file); memset(szFile,0,sizeof(szFile)); open_file.lpstrFile=szFile; open_file.lpstrFile[0]=TEXT('\0'); open_file.nMaxFile=sizeof(szFile); open_file.lpstrFilter=TEXT("音频文件wma\0*.wma\0音频文件mp3\0*.mp3\0所有音频文件\0*.*\0"); open_file.nFilterIndex=2; open_file.lpstrFileTitle=NULL; open_file.nMaxFileTitle=0; open_file.lpstrInitialDir=NULL; open_file.Flags=OFN_EXPLORER|OFN_PATHMUSTEXIST|OFN_FILEMUSTEXIST|OFN_ALLOWMULTISELECT|OFN_HIDEREADONLY; if(GetOpenFileName(&open_file)==0) { MessageBox(TEXT("打开文件失败"),TEXT(""),NULL); return; } else { lstrcpyn(path1,szFile,open_file.nFileOffset); path1[open_file.nFileOffset]='\0'; int nlen=strlen(path1); if(path1[nlen-1]!='\\') lstrcat(path1,TEXT("\\")); p=szFile+open_file.nFileOffset; } // HANDLE hThread; // hThread=CreateThread(NULL,0,Fun1Proc,NULL,0,NULL); // CloseHandle(hThread); */ int k=0; while(k<10) { /* char buffer[256]=""; char str[30]=""; strcpy(buffer,path1); strcat(buffer,p); sprintf(str,"%d",i++); int row=m_page1.m_music_list.InsertItem(j++,str); m_page1.m_music_list.SetItemText(row,1,p); m_page1.m_music_list.SetItemText(row,2,FormatTime(buffer)); fwrite(path1,1,strlen(path1),fp); fwrite(p,1,strlen(p),fp);*/ fwrite("aaaaa",1,5,fp); fflush(fp); k++; // p+=strlen(p)+1; } fclose(fp); } 这个可以
tree_go 2012-12-25
  • 打赏
  • 举报
回复
哪位大侠知道,给菜鸟指点下嘛。。

64,654

社区成员

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

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