首页 诗词 字典 板报 句子 名言 友答 励志 学校 网站地图
当前位置: 首页 > 教程频道 > 开发语言 > VC/MFC >

vs2005 获取应用程序绝对路径 小写盘符解决方法

2012-03-26 
vs2005获取应用程序绝对路径小写盘符我用GetModuleFileName函数获取应用程序的绝对路径,应该是大写的盘符

vs2005 获取应用程序绝对路径 小写盘符
我用GetModuleFileName函数获取应用程序的绝对路径,应该是大写的盘符比如D盘,在vs2005下怎么是小写d呢?

代码如下,这里的g_chWorkPath值为是小写的"d",应该为大写的
也就是说数组g_chWorkPath的第一个值为

C/C++ code
void GetWorkPath(){    GetModuleFileName(NULL, g_chWorkPath, IDP_APP_MAX_LEN);        TCHAR ch = '\\';    TCHAR* pdest = _tcsrchr( g_chWorkPath, ch);        if (pdest != NULL)     {        *(pdest+1) = 0;    }    }


PS:在vc6,0下获取的就是大写D

[解决办法]
那就替换了
if(找到d:)
d:替换为D:;
程序由你来控制
[解决办法]
探讨
引用:
大小写无所谓吧~

我分别在vc6.0中调试和vs2005中调试,调试的时候比较下vc6.0下和vs2005中的差别,就发现vc6.0中获取的是D:\TEST\SVCPlay\SVCPlay\Debug,而vs2005中获取的是d:\TEST\SVCPlay\SVCPlay\Debug,这个小写的d是不对的,在后面用该路径注册注册表时候是注册……

[解决办法]
docmgr.cpp921代码是

C/C++ code
if( AfxFullPath(szPath, szTemp) == FALSE )//而vc6则没有进行校验    {        ASSERT(FALSE);//这里断言        return NULL; // We won't open the file. MFC requires paths with                     // length < _MAX_PATH    }
[解决办法]
那就有可能不是大小写的问题!
[解决办法]
看你3楼的错误
显然你获取到的路径是有问题啊
用一个AfxMessageBox看看你到底获取到了什么
然后看看应该怎样修改
这个和大小写肯定是没有关系的
[解决办法]
探讨
我用GetModuleFileName函数获取应用程序的绝对路径,应该是大写的盘符比如D盘,在vs2005下怎么是小写d呢?

代码如下,这里的g_chWorkPath值为是小写的"d",应该为大写的
也就是说数组g_chWorkPath的第一个值为

C/C++ code
void GetWorkPath()
{
GetModuleFileName(NULL, g_chW,IDP_APP_MAX_LEN);……

[解决办法]
从这段看不出啥问题, VC6下很多条件都不检测,越高的版本检测越严格
在 docmgr.cpp CDocument* CDocManager::OpenDocumentFile(LPCTSTR lpszFileName)函数中设置个断点 一步步调试下看看
估计还是文件名非法,

[解决办法]
从另一个角度说几句,希望能帮到楼主


1)为什么你要将项目安装的那么深:×××项目××××/最终××××××××/×.....
能不能在根目录下,尽量不用中西文混合命名。vc6的项目名也是这样?
2)之所以进不了调试界面,感觉你在操作系统的默认调试工具不是VS2005,这和你安装和设置这两种编程调试工具有关。
[解决办法]
探讨
引用:
引用:
问题还木有解决,还是点击重试,无法进入调试界面,进不了进入不了docmgr.cpp文件
你是通过go运行的么

我是通过调试--开始执行(不调试)运行的

[解决办法]
楼主心态太急了,需要重新整理一下思路,
直接生成(不调试)执行程序都有错误,说明程序是有问题的,就先别管921代码了。(当然你也可工程改为release版尝试一下)

你那种方式不正确,是进不了源代码区的。就是说,你运行了执行程序(不调试)。系统带你进入汇编调试很正常。

在vs2005中运行调试---一定要进行调试,看有什么错误报告,再仔细分析。
[解决办法]
真郁闷,楼主连调试都不会?
#include <Shlwapi.h>
#pragma comment(lib, "Shlwapi.lib")
void GetWorkPath()
{
ASSERT((sizeof(g_chWorkPath) / sizeof(g_chWorkPath[0])) >= MAX_PATH);
g_chWorkPath[0] = '\0';
if (GetModuleFileName(NULL, g_chWorkPath, IDP_APP_MAX_LEN))
{
PathRemoveFileSpec(g_chWorkPath);
PathAddBackslash(g_chWorkPath);
}

/* 不要这么写!有经验跟没有经验的分别就体现在这里。
TCHAR ch = '\\';
TCHAR* pdest = _tcsrchr( g_chWorkPath, ch);

if (pdest != NULL) 


{
*(pdest+1) = 0;
}
*/
}

[解决办法]
我现在完全糊涂了
你到底是不是要调试
调试状态下到底有没有问题
直接点吧
用F5运行会不会出问题
如果这样不会就在你怀疑有问题的位置加AfxMessageBox
然后ctrl+F5运行再看看
[解决办法]

探讨

引用:
已经提示了,这个不能算完全没问题吧,楼主就没想中改一下?即使在vc6中找到解决方法也行吧

额 在vc6.0中没有这个的啊

[解决办法]
不是让你在那个文件中加断点
如果断下来可以看调用堆栈
然后找到自己的代码
而且
如果你加了AfxMessageBox
再去运行一样可以通过弹出信息判断错误位置啊
不知道你到底是怎么操作
到底是什么情况
[解决办法]
这个文件docmgr.cpp是不是在MFC的源码目录内?在VC中打开它,找到目的行,按F9键设置断点然后按F5键调试。

热点排行