My question 巨简单,关于ListBox控件。

lf_77 2001-07-26 10:56:35
用ListBox的dir方法显示当前目录下所有文件时,长目录名、长文件名不能完全显示,我该如何处理。该不难吧,在解决不了,我可惨了。
SetCurrentDirectory(tempPath);
int aa=m_ListDir.Dir(0x8010,"*");
...全文
56 2 打赏 收藏 转发到动态 举报
写回复
用AI写文章
2 条回复
切换为时间正序
请发表友善的回复…
发表回复
ahphone 2001-07-26
  • 打赏
  • 举报
回复
将路径转换为长路径名
VCKBASE
记得以前讨论过这方面的问题,就是当用户将一个文件名拖放到应用程序图标上时,系统传递短路径名到应用的命令行。系统的这样做大概是因为它不能肯定应用程序是否能处理长路径名。奇怪的是MFC不把路径名转换为长路径。这样就使得应用程序看起来不那么专业,因为它们只能显示短版文件名。

以前我写了一段代码来转换命令行文件名为长版文件名。这次我想对这个代码进行扩展并解决原来的一个缺陷。以前的程序虽然能运行,但它只能吸取长版文件名,不是整个路径。所以我打算将它做得更通用一些,可以转换任何存在的路径名为长版路径名。

过去我使用的方法是用给定的文件名调用FindFirstFile函数,它只返回一个存在的文件或目录的长版名,而不是整个路径。下面的代码解决了这个问题,它解析每一个目录或文件名并将它转换为它们的长版路径名。

注意:在Windows的API中有一个函数GetLongPathName(...)也能做相同的事情,但是,它只能在WIN98或WINDOWS NT,WINDOW 2000及以后的版本中运行。如果你想让你的代码在所有WIN 32操作系统中运行,那你最好还是避开这个API函数为妙。
define PATH_DELIMITER '\\'

//
BOOL MyGetLongPathName(LPTSTR lpszShortPath, LPTSTR lpszLongPath)
{
TCHAR *p, *pStart;
TCHAR buff[MAX_PATH];
WIN32_FIND_DATA wfd;
HANDLE handle;
int i;

// 初始化,保证串是“NULL”结尾
*buff = '\0';
*lpszLongPath = '\0';
//
p = lpszShortPath;
while (p != NULL) {

// 找下一个
p = strchr(pStart = p, PATH_DELIMITER);

// 检查是否找到'\\'
if (p != pStart) {
i = strlen(buff);
// 插入'\\'到临时缓冲
if (p == NULL)
strcpy(buff + i, pStart);
else {
*p = '\0';
strcpy(buff + i, pStart);
*p = PATH_DELIMITER;
}

// 拷贝'\\'盘符
if (strchr(buff + i, ':') != NULL)
strcat(lpszLongPath, buff + i);
else {
// 转换为长版名
handle = FindFirstFile(buff, &wfd);
if (handle == INVALID_HANDLE_VALUE)
return FALSE;
strcat(lpszLongPath, wfd.cFileName);
FindClose(handle);
}
}

// 空结尾
if (p != NULL) {
buff[i = strlen(buff)] = *p;
buff[i + 1] = '\0';
lpszLongPath[i = strlen(lpszLongPath)] = *p;
lpszLongPath[i + 1] = '\0';
}

// 走指针
if (p) p++;
}
return TRUE;
}

lf_77 2001-07-26
  • 打赏
  • 举报
回复
我先试一下,然后再来。

16,471

社区成员

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

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

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