求助:文件只能保存在当前文件夹,保存到其他地方失败!!

wpdwpd 2009-08-20 04:36:41
在mfc程序中创建了一个CButton,然后自己写了保存文件的消息响应函数,再利用CFileDialog来保存数据,但是有一个问题是:文件要是保存到当前程序的文件夹可以,但是保存到其他地方比如说桌面,就会成一个空文件。具体代码如下:

ps:用CopyFile函数时也会遇到上述的情况!



//将temp中的数据另存为用户指定的文件名和地址

void CNfcioView::onsave() //按下button的响应函数
{
CFileDialog saveDlg(false);
if(saveDlg.DoModal()==IDOK) //文件保存的对话框
{

CString cstr=saveDlg.GetPathName();
fstream file1("temp"); //当前程序文件夹下的数据文件
fstream file2;
double db;
file2.open(cstr);
file2.close();
file2.open(cstr);

while(file1>>db)
{
file2<<db<<" ";
file1>>db;
file2<<db<<" ";
file1>>db;
file2<<db<<endl;
}

file1.close();
file2.close();
}
}





temp文件的数据形式:

10 15 20
25 30 35
40 45 55



在这里先谢谢大家了!
...全文
218 9 打赏 收藏 转发到动态 举报
AI 作业
写回复
用AI写文章
9 条回复
切换为时间正序
请发表友善的回复…
发表回复
wpdwpd 2009-08-20
  • 打赏
  • 举报
回复
呵呵,自己找到原因了。

当我想把文件保存于桌面时,总是temp文件打开失败,最终存的文件是一个空文件。但是当temp文件放到桌面就没问题了。我想应该是GetPathName()这个函数改变了当前文件夹的路径。于是我改了一下程序,结果运行正确,证明了我的想法是正确的。

修改后的代码如下:
void CSaveView::onsave()
{
CFileDialog saveDlg(false);
CString cstr;
ofstream fs;
ifstream fs1;
fs1.open("temp",ios_base::in);

if(!fs1)
MessageBox("error",MB_OK);

if(saveDlg.DoModal()==IDOK)
{

issave=true;
cstr=saveDlg.GetPathName(); //修改了当前文件夹的路径
double db;
fs.open(cstr,ios_base::out);

while(fs1>>db)
{
fs<<db<<" ";
fs1>>db;
fs<<db<<" ";
fs1>>db;
fs<<db<<endl;
}

fs.close();
}

fs1.close();

}


谢谢各位的帮助!
wpdwpd 2009-08-20
  • 打赏
  • 举报
回复
都要疯了,存在当前文件夹下面的时候while(file1>>db)为真,保存成功,当存到其他文件夹下的是时候就while(file1>>db)为假,保存的文件中什么数据也没有!
MoXiaoRab 2009-08-20
  • 打赏
  • 举报
回复
调试看看,我觉得file根本就没打开
schlafenhamster 2009-08-20
  • 打赏
  • 举报
回复
"while(file1>>db) 直接就为假了".那就是file1没打开。
I_NBFA 2009-08-20
  • 打赏
  • 举报
回复
你这样, 用C格式化一下看看如何?
wpdwpd 2009-08-20
  • 打赏
  • 举报
回复
[Quote=引用 2 楼 schlafenhamster 的回复:]
fstream::open( const char* szName,int nMode, int nProt = filebuf::openprot )

[/Quote]
打开方式可以不用设定的。而且设定了结果也是一样的
wpdwpd 2009-08-20
  • 打赏
  • 举报
回复
问题的关键就是不能保存到其他文件夹,只能保存到当前程序的文件夹。而且我自己调试了一下,保存到其他文件夹的话,while(file1>>db) 直接就为假了……
schlafenhamster 2009-08-20
  • 打赏
  • 举报
回复
fstream::open( const char* szName, int nMode, int nProt = filebuf::openprot )
fengrx 2009-08-20
  • 打赏
  • 举报
回复
感觉和代码没多大关系,,

16,548

社区成员

发帖
与我相关
我的任务
社区描述
VC/MFC相关问题讨论
社区管理员
  • 基础类社区
  • AIGC Browser
  • encoderlee
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告

        VC/MFC社区版块或许是CSDN最“古老”的版块了,记忆之中,与CSDN的年龄几乎差不多。随着时间的推移,MFC技术渐渐的偏离了开发主流,若干年之后的今天,当我们面对着微软的这个经典之笔,内心充满着敬意,那些曾经的记忆,可以说代表着二十年前曾经的辉煌……
        向经典致敬,或许是老一代程序员内心里面难以释怀的感受。互联网大行其道的今天,我们期待着MFC技术能够恢复其曾经的辉煌,或许这个期待会永远成为一种“梦想”,或许一切皆有可能……
        我们希望这个版块可以很好的适配Web时代,期待更好的互联网技术能够使得MFC技术框架得以重现活力,……

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