getopenfilename多选文件/文件夹问题和getsavefilename另存为路径
关于使用getopenfilename多选多个文件是可以的。
以下是多选文件的代码
bool GetNeedOpenFilePath(vector<tstring>& vectFiles, HWND hwnd )
{
OPENFILENAME ofn;
TCHAR szOpenFileNames[*MAX_PATH] = {};
TCHAR szPath[MAX_PATH];
TCHAR szFileName[*MAX_PATH]; int nLen = ;
TCHAR* p = NULL;
ZeroMemory(&ofn, sizeof(ofn)); ofn.lStructSize = sizeof(ofn);
ofn.hwndOwner = hwnd;
//ofn.hInstance = (HMODULE)GetCurrentProcess();
ofn.lpstrFile = szOpenFileNames;
ofn.nMaxFile = sizeof(szOpenFileNames);
ofn.lpstrFile[] = _T('\0');
ofn.lpstrFilter = _T("All Files(*.*)\0*.*\0\0");
ofn.nFilterIndex = ;
ofn.lpstrFileTitle = NULL;
ofn.nMaxFileTitle = ;
ofn.lpstrTitle = I18NSTR(L"#IDS_FILESYSTEM_OPEN_FILE_DIR");
ofn.Flags = OFN_ENABLESIZING | OFN_FILEMUSTEXIST| OFN_ALLOWMULTISELECT| OFN_HIDEREADONLY /*| OFN_ENABLEHOOK *//*| OFN_ENABLEINCLUDENOTIFY*/| OFN_EXPLORER;
//ofn.lpfnHook = OFNHookProc;
if (!::GetOpenFileName(&ofn)) //如果打开文件失败,则不操作
{
return false;
} //把第一个文件名前的复制到szPath,即:
//如果只选了一个文件,就复制到最后一个'/'
//如果选了多个文件,就复制到第一个NULL字符
lstrcpyn(szPath,szOpenFileNames,ofn.nFileOffset); //当只选了一个文件时,下面这个NULL字符是必需的.
//这里不区别对待选了一个和多个文件的情况 szPath[ofn.nFileOffset] = '\0';
nLen = lstrlen(szPath);
if (szPath[nLen-] != '\\') //如果选了多个文件,则必须加上'//'
{
lstrcat(szPath,_T("\\"));
} p = szOpenFileNames + ofn.nFileOffset; //把指针移到第一个文件
ZeroMemory(szFileName, sizeof(szFileName)); while(*p)
{
//lstrcat(szFileName, szPath); //给文件名加上路径
//lstrcat(szFileName, p); //加上文件名
tstring tstrFile = _UTILITY::TCHARToUnicode(p);
tstring tstrFilePath = szPath;
tstrFilePath += tstrFile;
vectFiles.push_back(tstrFilePath);
//lstrcat(szFileName, _T("\n")); //换行
p += lstrlen(p) + ; //移至下一个文件
} return true;
}
但是关于使用getopenfilename()函数获取多选文件夹的路径问题,需要自定义一些模板资源。具体实现方式还需研究下。
使用getsavefilename()函数可以获取另存为路径:
bool GetSaveAsFilePath(tstring tstrFilePath, HWND hwnd)
{
OPENFILENAME ofn;
TCHAR szOpenFileNames[*MAX_PATH] = {};
TCHAR szPath[MAX_PATH];
TCHAR szFileName[*MAX_PATH]; int nLen = ;
TCHAR* p = NULL;
ZeroMemory(&ofn, sizeof(ofn)); ofn.lStructSize = sizeof(ofn);
ofn.hwndOwner = NULL;
//ofn.hInstance = (HMODULE)GetCurrentProcess();
ofn.lpstrFile = szOpenFileNames;
ofn.nMaxFile = sizeof(szOpenFileNames);
ofn.lpstrFile[] = _T('\0');
ofn.lpstrFilter = _T("All Files(*.*)\0*.*\0\0");
ofn.nFilterIndex = ;
ofn.lpstrFileTitle = NULL;
ofn.nMaxFileTitle = ;
ofn.lpstrTitle = I18NSTR(L"#IDS_FILESYSTEM_SAVE_AS");
ofn.Flags = OFN_HIDEREADONLY | OFN_PATHMUSTEXIST | OFN_EXPLORER;
ofn.FlagsEx = OFN_EX_NOPLACESBAR;
//ofn.lpfnHook = OFNHookProc;
if (!::GetSaveFileName(&ofn)) //如果打开文件失败,则不操作
{
return false;
} tstrFilePath = ofn.lpstrFile;
return true;
}
getopenfilename多选文件/文件夹问题和getsavefilename另存为路径的更多相关文章
- Android文件/文件夹选择器(支持多选操作),已封装为lib库,直接添加依赖即可。
话不多少,先上图一览: 接下来我们开始写个app测试: 1.新建Android工程:FileSelectorTest 2.更改MainActivity: 在里面写四个textview模拟button, ...
- Elicpse使用技巧-打开选中文件文件夹或者包的当前目录
很多时候,我们需要在eclipse那里打开选中文件(文件夹,包)的当前目录,在资源管理器那里显示这个目录,这个时候,我们又不想采用“选中文件/文件夹/包名--右击--Properties--Locat ...
- Eclipse 中打开选中文件/文件夹所在目录
习惯了使用VS中的 ”通过右键打开选中文件/文件夹在电脑中的目录”功能后, 当切换到Eclipse环境后,发现居然找不到这个功能, 虽可以通过右键文件属性,看到文件路径,复制路径然后在资源管理器中打开 ...
- NSFileManager计算文件/文件夹大小
在一些软件中,一般都会给用户展现当前APP的内存,同时用户可以根据自己的需要来清除缓存的内容.一般而言,文件夹是没有大小这个属性的,所以需要遍历文件夹的内容来计算文件夹的大小,下面用NSFileMan ...
- linux下SVN忽略文件/文件夹的方法
linux下SVN忽略文件/文件夹的方法 假设想忽略文件temp 1. cd到temp所在的目录下: 2. svn propedit svn:ignore . 注意:请别漏掉最后的点(.表示当前目录) ...
- 【SVN】删除文件/文件夹 svn: E205007: Could not use external editor to fetch log message
在SVN Server上删除文件/文件夹 svn delete 文件的URL -m "评论" 一定要加 -m 不然会报错 svn: E205007: Could not use e ...
- Linux中RM快速删除大量文件/文件夹方法
昨天遇到一个问题,在Linux中有一个文件夹里面含有大量的Cache文件(夹),数量级可能在百万级别,使用rm -rf ./* 删除时间慢到不可接受.Google了一下,查到了一种方法,试用了下确实比 ...
- 当IIS挂的网站出现选 图片文件, 静态文件都打不开时, 可以试试新建一个应用程序池试试看...
当IIS挂的网站出现选 图片文件, 静态文件都打不开时, 可以试试新建一个应用程序池试试看...
- linux压缩文件(夹) zip uzip命令的用法
压缩文件(夹) # 压缩列举的文件,格式如下: zip 压缩包名称 文件1 文件2 文件3 ... # 压缩test.txt, a.out文件,并取名为abc.zip $ zip abc.zip te ...
随机推荐
- Python模拟Linux的Crontab, 写个任务计划需求
Python模拟Linux的Crontab, 写个任务计划需求 来具体点 需求: 执行一个程序, 程序一直是运行状态, 这里假设是一个函数 当程序运行30s的时候, 需要终止程序, 可以用python ...
- http代理和SOCKS5代理的区别
HTTP代理:能够代理客户机的HTTP访问,主要是代理浏览器访问网页,它的端口一般为80.8080.3128等:SOCKS代理:SOCKS代理与其他类型的代理不同,它只是简单地传递数据包,而并不关心是 ...
- MP3帧时长为26ms的来历
- (原创)Python文件与文件系统系列(3)——os.path模块
os.path 模块实现了一些操作路径名字符串的函数,可以通过 import os.path 使用该模块,不过即使仅仅 import os 也可以使用该模块的方法. 1. abspath(path) ...
- Xianfeng轻量级Java中间件平台:一期开发计划
关于Xianfeng轻量级Java中间件平台,考虑到需要控制开发周期,通过分期开发的方式来实现一些基础的.常用的功能,这样有利于跟踪开发计划.一期的开发计划,主要实现的目标如下: 系统架构: 1.确定 ...
- TCDB 数据库简介
TCDB是对膜转运蛋白(Membrane Transport Protein)进行分类的一个数据库,它制定了一套转运蛋白分类系统(Transporter Classification), 简称TC S ...
- 每天一个linux命令:Linux 目录结构
对于每一个Linux学习者来说,了解Linux文件系统的目录结构,是学好Linux的至关重要的一步.,深入了解linux文件目录结构的标准和每个目录的详细功能,对于我们用好linux系统至关只要,下面 ...
- 安卓开发笔记——打造万能适配器(Adapter)
为什么要打造万能适配器? 在安卓开发中,用到ListView和GridView的地方实在是太多了,系统默认给我们提供的适配器(ArrayAdapter,SimpleAdapter)经常不能满足我们的需 ...
- Java编程思想学习笔记——复用类
前言 复用代码是Java众多引人注目的功能之一. 达到复用代码的方法有: 组合:新的类由现有类的对象所组成.(复用现有代码的功能,而非它的形式) 继承:按照现有类的类型组建新类.(不改变现有类的形式, ...
- [转]油猴Tampermonkey-让百度云下载飞起来
1. 简介 Tampermonkey,油猴脚本是一款免费的浏览器扩展程序. 我们这里用于Chrome浏览器,目的是为了让百度云里面的文件以满速下载,VIP还得出钱呢. 2. 安装 安装Lantern蓝 ...