发新话题
打印

关于DIR的问题

关于DIR的问题

我写了一个基于SDI的关于文档读写的程序,我把该程序需要的一些数据文档全部放在了我自建的DATA文件夹中(注:DATA文件夹和Debug文件夹并列),并且我在程序VIEW类的一些函数调用中使用了相对路径,例如pDoc->OnOpenDocument("data\aaa.txt");等等,也就是说这些调用的前提是:程序当前DIR为工程目录,否则就会出错!错误是程序弹出消息窗口"dataaaa.txt中包含无效的路径",请问我该怎么样设置这些DIR才能确保程序万无一失?
不要告诉我使用象"C:\Program Files\MyProgram\Data\aaa.txt"这样的绝对路径,我需要在设计时考虑到用户安装文件夹的灵活性.

获得当前路径:

char EXEDirectory[MAX_PATH];
memset(EXEDirectory,0,MAX_PATH);
GetCurrentDirectory(MAX_PATH,EXEDirectory);

你也可以把安装的路径写在注册表里面啊。从注册表读出来就可以了。

DWORD GetModuleFileName(
  HMODULE hModule,    // handle to module to find filename for
  LPTSTR lpFilename,  // pointer to buffer to receive module path
  DWORD nSize         // size of buffer, in characters
);

这取得的文件名是全路径, 如:c: est est.exe,分析取c: est即可取得目录.也可以:

GetCurrentDirectory(...)

取文件的路径可以用GetModuleFileName函数,取出后去掉文件名即可。
举个例子:
char m_FilePath[255];
CString m_strTargetPath;
GetModuleFileName(NULL,m_FilePath,255);//...去掉文件名
m_strTargetPath.format("%s\data",m_FilePath); //m_strTargetPath中即为你需要的路径。
如何去掉文件名我想就不用我写了吧 :)
要注意一点:如果你是在VC环境下运行,VC会将EXE文件生成到Debug或Release目录中,这样在取路径时会带上这两个目录(其中之一),如果你想模拟真实环境的话第一可以将Data目录建立Debug或release目录下。第二可以在去掉文件名的同时将Debug或release目录也去掉。

设置键值:

HKEY hKEY;
char data_Set[] = "AppDir"; //要设置的键值
char Key[] = "路径";
long ret;
DWORD Regtype=REG_SZ;
ret=(::RegOpenKeyEx(HKEY_LOCAL_MACHINE, data_Set, 0, KEY_WRITE,

TOP

发新话题