[求助]如何获得程序路径

yease_13 2006-08-29 03:39:43
那么我们该如何去获得程序路径呢?程序大本营上是使用的 API 函数 GetModuleFileName(),例如,我使用以下代码定位程序路径和取文件的完整路径文件名:

CString appPath;
GetModuleFileName(NULL, appPath.GetBuffer(MAX_PATH), MAX_PATH);
//注:使用该API函数得到的是程序文件完整路径文件名,去掉文件名后才是路径。
appPath.ReleaseBuffer();
int n = appPath.ReverseFind(\\);
CString helpFile;
helpFile = appPath.Left(n);
TCHAR c = helpFile.GetAt(n - 1);
if(c == \\) helpFile += "HtmlHelp.chm";
else helpFile += "\\HtmlHelp.chm";
通过 HtmlHelp 调用帮助文件(.chm)的程序代码如下:

HtmlHelp(NULL, (LPCSTR)helpFile, HH_DISPLAY_TOPIC, 0);

以上是在VC中调用HTML文件的关联程序.按照上面获取文件路径的方法我操作时出现以下错误,请大家帮我看看出了什么问题.
C:\Documents and Settings\yease\桌面\Tester(ListView)450\Demo_Outlook.cpp(1094) : error C2017: illegal escape sequence
C:\Documents and Settings\yease\桌面\Tester(ListView)450\Demo_Outlook.cpp(1094) : error C2017: illegal escape sequence
C:\Documents and Settings\yease\桌面\Tester(ListView)450\Demo_Outlook.cpp(1094) : error C2660: 'ReverseFind' : function does not take 0 parameters
C:\Documents and Settings\yease\桌面\Tester(ListView)450\Demo_Outlook.cpp(1098) : error C2017: illegal escape sequence
C:\Documents and Settings\yease\桌面\Tester(ListView)450\Demo_Outlook.cpp(1098) : error C2017: illegal escape sequence
C:\Documents and Settings\yease\桌面\Tester(ListView)450\Demo_Outlook.cpp(1098) : error C2059: syntax error : ')'
C:\Documents and Settings\yease\桌面\Tester(ListView)450\Demo_Outlook.cpp(1099) : error C2181: illegal else without matching if
Error executing cl.exe.

本人绝对的菜鸟,如果高手能给出直接可以用的程序将万分感激.
...全文
412 8 打赏 收藏 举报
写回复
用AI写文章
8 条回复
切换为时间正序
请发表友善的回复…
发表回复
思危 2006-08-29
  • 打赏
  • 举报
回复
TCHAR szPath[MAX_PATH];
GetModuleFileName(NULL, szPath, MAX_PATH);

TCHAR path_buffer[_MAX_PATH];
TCHAR drive[_MAX_DRIVE];
TCHAR dir[_MAX_DIR];
TCHAR fname[_MAX_FNAME];
TCHAR ext[_MAX_EXT];
_tsplitpath( path_buffer, drive, dir, fname, ext );

CString strPath = drive;
strPath += dir;
strPath += _T("HtmlHelp.chm");

HtmlHelp(NULL, (LPCSTR)strPath , HH_DISPLAY_TOPIC, 0);
yease_13 2006-08-29
  • 打赏
  • 举报
回复
请问毛毛,你说的意思我懂了.
但是我的程序究竟应该如何改呢?已经弄了2天了,实在是郁闷的不能再郁闷了.你能在我的程序基础上写个改好可用的程序给我吗?万分感谢!
handsomerun 2006-08-29
  • 打赏
  • 举报
回复
'\\'表示是一个字符,内容是\

所以你ReverseFind的意思是
从后面找出字符窜里面 '\\'的位置

用两个\\是因为需要转义,代表是\
yease_13 2006-08-29
  • 打赏
  • 举报
回复
\\ ---〉 '\\'
请问我是真的 你这个的意思是什么啊能说的详细点吗?
handsomerun 2006-08-29
  • 打赏
  • 举报
回复
另外,我是真的,说得也对的,

handsomerun 2006-08-29
  • 打赏
  • 举报
回复
分割路径,有个很简单的函数

_splitpath

void _splitpath( const char *path, char *drive, char *dir, char *fname, char *ext );

Example

/* MAKEPATH.C */

#include <stdlib.h>
#include <stdio.h>

void main( void )
{
char path_buffer[_MAX_PATH];
char drive[_MAX_DRIVE];
char dir[_MAX_DIR];
char fname[_MAX_FNAME];
char ext[_MAX_EXT];

_makepath( path_buffer, "c", "\\sample\\crt\\", "makepath", "c" );
printf( "Path created with _makepath: %s\n\n", path_buffer );
_splitpath( path_buffer, drive, dir, fname, ext );
printf( "Path extracted with _splitpath:\n" );
printf( " Drive: %s\n", drive );
printf( " Dir: %s\n", dir );
printf( " Filename: %s\n", fname );
printf( " Ext: %s\n", ext );
}


Output

Path created with _makepath: c:\sample\crt\makepath.c

Path extracted with _splitpath:
Drive: c:
Dir: \sample\crt\
Filename: makepath
Ext: .c

coolcup 2006-08-29
  • 打赏
  • 举报
回复
\\ ---〉 '\\'

16,550

社区成员

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

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

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