如何允许在程序运行的时候删除用CFileDialog打开的dialog中创建的文件夹。
2010-09-29 15:50
302 查看
SQA发现的问题:
在保存文件的时候,在打开的对话框(程序中用CFileDialog打开,flag为OFN_OVERWRITEPROMPT | OFN_HIDEREADONLY )中创建了一个新的文件夹,然后将文件存到该文件夹中。保存完毕之后,在程序没有退出的情况下去删除该文件夹,发现里面的文件被删除了,可是系统不允许删除文件夹。
解决办法:
将flag的改为:OFN_OVERWRITEPROMPT | OFN_HIDEREADONLY | OFN_NOCHANGEDIR。
注意:
由于文件夹被删除了,所以文件保存的位置就不存在了。所以保存文件之前要检查一下文件夹是否存在,如果不存在,则将文件夹设置回默认的文件夹,参考代码如下:
参考文章:(从这篇文章里可以隐隐约约知道为什么要将OFN_NOCHANGEDIR加入flag)
http://www.eggheadcafe.com/software/aspnet/29631011/cfiledialog-dialog-doesnt-release-program-folder-untill-the-app-exits.aspx
在保存文件的时候,在打开的对话框(程序中用CFileDialog打开,flag为OFN_OVERWRITEPROMPT | OFN_HIDEREADONLY )中创建了一个新的文件夹,然后将文件存到该文件夹中。保存完毕之后,在程序没有退出的情况下去删除该文件夹,发现里面的文件被删除了,可是系统不允许删除文件夹。
解决办法:
将flag的改为:OFN_OVERWRITEPROMPT | OFN_HIDEREADONLY | OFN_NOCHANGEDIR。
注意:
由于文件夹被删除了,所以文件保存的位置就不存在了。所以保存文件之前要检查一下文件夹是否存在,如果不存在,则将文件夹设置回默认的文件夹,参考代码如下:
//ctlavp1/SW Business/Software/Transfer //ctlavp1/SW Business/Software/Transfer/Creative Installation Packages if (m_strLastSaveFolder.IsEmpty() || !PathFileExists(m_strLastSaveFolder)) { SHGetSpecialFolderPath(NULL, strSaveFolder(MAX_PATH), CSIDL_DESKTOP, TRUE); strSaveFolder.ReleaseBuffer(); } esle { strSaveFolder = m_strLastSaveFolder; } std::wstring strSaveFile = ::PathFindFileName(m_strCurrentFile); CFileDialog dlg(FALSE, L"jpg", strSnapFile.c_str(), OFN_OVERWRITEPROMPT | OFN_HIDEREADONLY | OFN_NOCHANGEDIR, L"jpg (*.jpg)|*.jpg|", this); dlg.SetOwner(this); dlg.m_ofn.lpstrInitialDir = strSaveFolder; if (IDOK == dlg.DoModal()) { ... m_strLastSaveFile = dlg.GetPathName(); ::PathRemoveFileSpec(m_strLastSaveFile.GetBuffer(MAX_PATH)); m_strLastSaveFile.ReleaseBuffer(); }
参考文章:(从这篇文章里可以隐隐约约知道为什么要将OFN_NOCHANGEDIR加入flag)
http://www.eggheadcafe.com/software/aspnet/29631011/cfiledialog-dialog-doesnt-release-program-folder-untill-the-app-exits.aspx
相关文章推荐
- 批处理bat文件实现复制、删除、创建文件夹、执行程序、打开文件
- win7上运行某程序的时候,如果这个程序需要以管理员的身份运行,那么就会有“用户帐户控制”的提示:“您想允许来自...发布者的以下程序对此计算机进行更改吗?”请问,win7如何知道哪些程序需要以管理员的身份运行?
- 如何将项目中的图片在生成后出现在程序运行文件夹中
- C# 创建互斥程序_只允许运行一个程序实例
- 通过文件锁实现,程序开始运行时,先判断文件是否存在,若存在则表明该程序已经在运行了,如果不存在就用open函数创建该文件,程序退出时关闭文件并删除文件。
- win8.1如何删除打开这台电脑最上面的几个文件夹
- Java中如何让web服务器启动的时候自动运行web程序中某个类的某个方法
- 打开图片,提示:该文件没有程序与之关联来执行该操作。请在控制面板的文件夹选项中创建关联
- 当某个程序已经启动,再点击程序快捷方式如何切换到已打开的程序界面(程序只允许启动一个实例)
- CUDA程序在运行的时候如何选择可用的计算设备
- 在装SQL2000时,有是提示"以前的某个程序安装已在安装计算机上创建挂起的文件操作,运行安装程序之前必须重新启动计算机",如何解决,
- VC 如何使程序运行后自己删除自己
- 如何程序正常运行的时候,产生core文件
- VC 如何使程序运行后自己删除自己
- 如何在选择打开方式的程序列表中手动添加或删除某个程序
- “Visual Studio .NET 无法创建或打开应用程序。问题很可能是因为本地WEB本地服务器上没有安装所需的组件。请运行Visual Studio .NET安装程序并添加WEB开发组件“的一种解决方案
- 文件的打开、复制、写入、创建、删除、获取设置 文件属性 查找文件 遍历文件夹等14.4.26
- 如何打开一个程序或创建一个进程 (适用与执行CMD命令)
- 在程序document文件夹里边创建新的文件夹及删除文件夹
- vc工程中打开的时候类视图无法完全显示类解决方案——删除工程所在文件夹中的后缀为ncb的文件,重新打开即可