快要疯掉了,谁帮我看看这是怎么回事,找到原因后给 300 分。

ra3 2004-12-15 11:23:14
我用 vc7 写了一个定时关机程序,大部分已经完成;有一个问题找了三天了,也没的弄明白是怎么回事。在程序中自己写了一个操作 ini 文件的类,测试过没有问题,在程序中用来保存一些设置。

按设置菜单弹出设置选项对话框,共有两种类型 Check 和 CEdit ,有三个 CEdit ,一个用来保存数字(m_editTime), 两个用来保存文件路径(m_editOpenFile、m_editSoundFile)。

当按下打开文件的按钮后,调用 CFileDialog 打开文件对话框,然后把选中的文件路径和名称复制到 m_editOpenFile 对话框中,当按 OK 按钮时保存到指定位置,程序结束时会调用 save 保存到 ini 文件中。

问题:

(1) 如果没有使用 CFileDialog 对话框,直接在 m_editOpenFile 文本框里直接输入字符,可以正确保存结果;

(2) 如果将打开的ini文件设置为 "C:\\setup.ini" 则不会有问题,如果ini文件在当前目录下只要打开过 CFileDialog 对话框,打死都不保存任何信息;

代码太多了不方便贴出来,哪位高人帮我看下,留下 mail 发给你谢了!
...全文
163 27 打赏 收藏 转发到动态 举报
写回复
用AI写文章
27 条回复
切换为时间正序
请发表友善的回复…
发表回复
ra3 2004-12-16
  • 打赏
  • 举报
回复
其他人到这里领分。
http://community.csdn.net/Expert/topic/3649/3649493.xml?temp=.6876642
http://community.csdn.net/Expert/topic/3649/3649494.xml?temp=.2257501
http://community.csdn.net/Expert/topic/3649/3649495.xml?temp=.2564813
ra3 2004-12-16
  • 打赏
  • 举报
回复
好象是,要是因为这个斑主认为是倒分,也太冤了。
EnochShen 2004-12-16
  • 打赏
  • 举报
回复
没有人回复,删贴不扣性欲分的~~~
EnochShen 2004-12-16
  • 打赏
  • 举报
回复
你还是把帖子删掉吧,我真的不敢去,我的性欲分都是好不容易挣的~~ ^_^
ra3 2004-12-16
  • 打赏
  • 举报
回复
三百分你要是不要,可就给别人了!
ra3 2004-12-16
  • 打赏
  • 举报
回复
好啊一定!
EnochShen 2004-12-16
  • 打赏
  • 举报
回复
呵呵,不必了,100分足以,这个问题没那么夸张的~~
我还差100多分就升星了,你这样斑竹肯定会说我倒粪的~~~
呵呵,记得我升星散分的时候,进来凑凑热闹~~~
ra3 2004-12-16
  • 打赏
  • 举报
回复
EnochShen(小疯子抢分了,拦我者石欠!) 请去这里领取 三百分, 非常感谢!
http://community.csdn.net/Expert/topic/3649/3649473.xml?temp=7.412356E-02
http://community.csdn.net/Expert/topic/3649/3649474.xml?temp=.9611627
http://community.csdn.net/Expert/topic/3649/3649475.xml?temp=.1323511
ra3 2004-12-16
  • 打赏
  • 举报
回复
刚试过 EnochShen(小疯子抢分了,拦我者石欠!) 是的正确。

加上了完整的路径名后可以, 我又把保存文件的数组设为 1024 这回可以了。

多谢! 接分!

EnochShen 2004-12-16
  • 打赏
  • 举报
回复
最好是:
char* pBuffer = new char[MAX_PATH];
GetModuleFileName(NULL,pBuffer,MAX_PATH);
CString strFullPath = pBuffer;
int nFind = strFullPath.ReverseFind('\\');
CString strIniFilePath = strFullPath.Left(nFind + 1) + "Setup.ini";
delete[] pBuffer;

if (!m_ini.open(strIniFilePath))

GetCurrentDirectory(path, MAXPATH);也不安全,如果用过CFileFind修改过CurrentDirectory,或者是CreateProcess创建的进程,没有设好CurrentDirectory,都会出错的~~`


ra3 2004-12-16
  • 打赏
  • 举报
回复
是会有这种情况, 可是为什么打开文件设置为 "setup.ini" 不加上完整的路径不行呢?

我在其它程序里面,都没有遇到这个问题,m_fileName 足够保存这个文件名的, 我是在控制台程序里做的。
EnochShen 2004-12-16
  • 打赏
  • 举报
回复
比如说:

typedef struct tagBufferStruct//在这里我为了使szBuffer1和szBuffer2的内存地址相临,用了结构
{
char szBuffer1[2];
char szBuffer2[2];
}BUFFERSTRUCT;

void BufferOverflow()
{
BUFFERSTRUCT BufferStruct;

strcpy(BufferStruct.szBuffer1,"Hello Word!This is a test for Buffer Overflow!");

//这个时候szBuffer1和szBuffer2都会是"Hello Word!This is a test for Buffer Overflow!",通常来说当缓冲区溢出的时候会覆盖掉它后面的内存,如果运气好,那块内存没有被人使用就什么事情也没有,如果那块内存被别的程序申请了,那么就会出错~~~
}
ra3 2004-12-16
  • 打赏
  • 举报
回复
char m_fileName[80] 这个如果只设为 "setup.ini" 的话不行,我试过很多次, 如果取当前路径加上了才行, 我一开始做的时候就根本没有想要取完整路径,只想保存文件名。 :)

ra3 2004-12-16
  • 打赏
  • 举报
回复
MZP(mzp) ( ) 信誉:99
非常报欠,你可以去领分,如果不愿意的话,可以另开贴给分。
http://community.csdn.net/Expert/topic/3649/3649493.xml?temp=.6876642
http://community.csdn.net/Expert/topic/3649/3649494.xml?temp=.2257501
http://community.csdn.net/Expert/topic/3649/3649495.xml?temp=.2564813
MZP 2004-12-16
  • 打赏
  • 举报
回复
关于这个问题,我认为我的回答是正确的。
你这句如果不保存路径char m_fileName[80],原本是正确的,如果保存路径,才会出现溢出!一般来说文件名不过超出80个字符。
哪么为什么我一分也没有得到呢,请楼主给个解释!
ra3 2004-12-16
  • 打赏
  • 举报
回复
总算明白是怎么回事了,原来是调用 CFileDialog 对话框后会改变当前路径,结果把文件都写到CFileDialog 对话框打开的那个目录里去了。
ra3 2004-12-15
  • 打赏
  • 举报
回复
我把可执行文件和 setup.ini 文件一起放在 c: 根目录下,也不行。

char m_fileName[80];
EnochShen 2004-12-15
  • 打赏
  • 举报
回复
if (!m_ini.open("setup.ini"))

你是这样Open的,建议你在任何情况下最好都要用
if (!m_ini.open("(GetModuleFileName-文件名)+ setup.ini"))
薛定谔之死猫 2004-12-15
  • 打赏
  • 举报
回复
我来试试
ljw_jellyfish@126.com
ra3 2004-12-15
  • 打赏
  • 举报
回复
我在 CMyIni 类里根本就没有设置更改文件名的函数, m_fileName 保存文件名的字符串是 protected 里的;
加载更多回复(7)

16,467

社区成员

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

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

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