MFC写文件,写不进去,用了各种办法了,求各位大佬支招儿!!!

r_mc123 2018-08-22 04:52:20

CStdioFile newfile;
CStdioFile oldfile;//这仨我在.h文件中声明的
CString A;
void CMFCApplication1Dlg::OnBnClickedButton1()
{
// TODO: 在此添加控件通知处理程序代码
TCHAR szFilter[] = _T("DAT Files (*.dat)|*.dat|All Files (*.*)|*.*||");//|所有文件(*.*)|*.*||
CFileDialog fileopen(TRUE, _T("bat"), NULL, 0, szFilter, this);
CString oldFilePath;
CString newFilePath;
CString fileext;
CString filetitle;
if (fileopen.DoModal() == IDOK)
{
oldFilePath = fileopen.GetPathName();
SetDlgItemText(IDC_EDIT1, oldFilePath);//设置对话框中的路径
while (oldFilePath)
{
int dirpos = oldFilePath.ReverseFind('.');
fileext = oldFilePath.Right(oldFilePath.GetLength() - dirpos - 1);
dirpos = oldFilePath.ReverseFind('\\');
CString filedir1 = oldFilePath.Left(dirpos + 1) + "bin\\";
BOOL m_b = CreateDirectory(filedir1, NULL);
CString fname = oldFilePath.Right(oldFilePath.GetLength() - dirpos - 1);
dirpos = fname.ReverseFind('.');
filetitle = fname.Left(dirpos);
newFilePath = filedir1 + filetitle + ".txt";
if (oldfile.Open(oldFilePath, CFile::modeRead) == NULL)
{
AfxMessageBox("文件打开失败");
return;
}
Analysis();

CFileException fileException;
if (newfile.Open(newFilePath, CFile::modeCreate | CFile::modeWrite | CFile::typeText), &fileException)
{
WriteFile();
}
else
{
TRACE("Can't open file %s,error=%u/n", newFilePath, fileException.m_cause);
}

newfile.Flush();

oldfile.Close();
newfile.Close();
break;
}
}
}



void CMFCApplication1Dlg::WriteFile()
{

CString str;
int n;
str.Format("%s\n", "#Password");
newfile.WriteString(str);
str.Format("\t%d\t", ner.num);
newfile.WriteString(str);
n = GetLastError();
}

在mfc2017下运行,一切正常,成功创建文件夹和文件,但是就是没法往文件里写数据!!!求大佬帮助,刚毕业的菜鸟一枚。
...全文
334 14 打赏 收藏 转发到动态 举报
写回复
用AI写文章
14 条回复
切换为时间正序
请发表友善的回复…
发表回复
r_mc123 2018-08-23
  • 打赏
  • 举报
回复
引用 3 楼 sghcpt 的回复:
我在vs2013中,使用楼主上面给出的代码,都能正常的把数据写入到文件中。会不会楼主那边创建bin目录失败或者没有写文件权限之类的。。楼主可以使用管理员的方式打开vs2017,然后再运行代码试试。。


谢谢,确实是权限问题,不过不是vs的,是我的d盘写入权限没开,谢谢大佬!!!
赵4老师 2018-08-23
  • 打赏
  • 举报
回复
引用 10 楼 sichuanpb 的回复:
反正WIN10一般不让写C盘

关闭UAC、防火墙、杀毒软件、……
以管理员身份运行
……
r_mc123 2018-08-23
  • 打赏
  • 举报
回复
还是写不进去啊郁闷了
r_mc123 2018-08-23
  • 打赏
  • 举报
回复
引用 9 楼 yiyefangzhou24 的回复:
[quote=引用 6 楼 r_mc123 的回复:]
[quote=引用 1 楼 yiyefangzhou24 的回复:]
看代码好像没什么问题,把这三个变量申明成CMFCApplication1Dlg的成员变量不好吗,非要搞成全局的?
CStdioFile newfile;
CStdioFile oldfile;//这仨我在.h文件中声明的
CString A;


老哥,这样声明会对程序造成不好的影响么?还是这样声明看着不太规范?因为我在别的函数会用到这仨,索性我就声明全局了。因为我是新手所以确实不太明白,请您解答。[/quote]
没有啥不好的影响,个人习惯,我不喜欢破坏c++的封装特性,把c的风格和c++的风格混用看起来有那么点不舒服,当然,必须要用全局变量的不可避免[/quote]
好的哥,这我以后肯定主意。
yiyefangzhou24 2018-08-23
  • 打赏
  • 举报
回复
引用 6 楼 r_mc123 的回复:
[quote=引用 1 楼 yiyefangzhou24 的回复:]
看代码好像没什么问题,把这三个变量申明成CMFCApplication1Dlg的成员变量不好吗,非要搞成全局的?
CStdioFile newfile;
CStdioFile oldfile;//这仨我在.h文件中声明的
CString A;


老哥,这样声明会对程序造成不好的影响么?还是这样声明看着不太规范?因为我在别的函数会用到这仨,索性我就声明全局了。因为我是新手所以确实不太明白,请您解答。[/quote]
没有啥不好的影响,个人习惯,我不喜欢破坏c++的封装特性,把c的风格和c++的风格混用看起来有那么点不舒服,当然,必须要用全局变量的不可避免
sichuanwww 2018-08-23
  • 打赏
  • 举报
回复
反正WIN10一般不让写C盘
r_mc123 2018-08-23
  • 打赏
  • 举报
回复
引用 5 楼 chengbar 的回复:
open mode 加 CFile::typeText 试试


这个办法很好,但是没认真看我代码吧,都加上了
zgl7903 2018-08-23
  • 打赏
  • 举报
回复
设置断点 单步调试运行
r_mc123 2018-08-23
  • 打赏
  • 举报
回复
引用 1 楼 yiyefangzhou24 的回复:
看代码好像没什么问题,把这三个变量申明成CMFCApplication1Dlg的成员变量不好吗,非要搞成全局的?
CStdioFile newfile;
CStdioFile oldfile;//这仨我在.h文件中声明的
CString A;


老哥,这样声明会对程序造成不好的影响么?还是这样声明看着不太规范?因为我在别的函数会用到这仨,索性我就声明全局了。因为我是新手所以确实不太明白,请您解答。
sevancheng 2018-08-22
  • 打赏
  • 举报
回复
open mode 加 CFile::typeText 试试
半雨微凉丶 2018-08-22
  • 打赏
  • 举报
回复
GetLastError()查看错误原因
sghcpt 2018-08-22
  • 打赏
  • 举报
回复
我在vs2013中,使用楼主上面给出的代码,都能正常的把数据写入到文件中。会不会楼主那边创建bin目录失败或者没有写文件权限之类的。。楼主可以使用管理员的方式打开vs2017,然后再运行代码试试。。
yiyefangzhou24 2018-08-22
  • 打赏
  • 举报
回复
你调试的时候在void CMFCApplication1Dlg::WriteFile()下个断点 ,看看WriteString返回
yiyefangzhou24 2018-08-22
  • 打赏
  • 举报
回复
看代码好像没什么问题,把这三个变量申明成CMFCApplication1Dlg的成员变量不好吗,非要搞成全局的?
CStdioFile newfile;
CStdioFile oldfile;//这仨我在.h文件中声明的
CString A;

16,467

社区成员

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

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

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