我遇到的问题是这样的:
我写了一个基于SDI的关于文档读写的程序,我把该程序需要的一些数据文档全部放在了我自建的DATA文件夹中(注:DATA文件夹和Debug文件夹并列),并且我在程序VIEW类的一些函数调用中使用了相对路径,例如pDoc->OnOpenDocument("data\\aaa.txt");等等,也就是说这些调用的前提是:程序当前DIR为工程目录,否则就会出错!错误是程序弹出消息窗口"data\aaa.txt中包含无效的路径",请问我该怎么样设置这些DIR才能确保程序万无一失?不要告诉我使用象"C:\\Program Files\\MyProgram\\Data\\aaa.txt"这样的绝对路
径,我需要在设计时考虑到用户安装文件夹的灵活性.在线等待中................
我写了一个基于SDI的关于文档读写的程序,我把该程序需要的一些数据文档全部放在了我自建的DATA文件夹中(注:DATA文件夹和Debug文件夹并列),并且我在程序VIEW类的一些函数调用中使用了相对路径,例如pDoc->OnOpenDocument("data\\aaa.txt");等等,也就是说这些调用的前提是:程序当前DIR为工程目录,否则就会出错!错误是程序弹出消息窗口"data\aaa.txt中包含无效的路径",请问我该怎么样设置这些DIR才能确保程序万无一失?不要告诉我使用象"C:\\Program Files\\MyProgram\\Data\\aaa.txt"这样的绝对路
径,我需要在设计时考虑到用户安装文件夹的灵活性.在线等待中................
解决方案 »
- cannot convert from 'unsigned short [260]' to 'char *'
- vc中的对话框问题?
- VC++高手,看看吧!
- 如何将CString 12345678 转化成 DWORD dw=0x12345678?
- 在钩子中,调用CreateProcess()启动外部程序的问题,帮忙啊
- 是不是在按钮上贴了位图就不能设置按钮颜色了?
- 一个有关DLL中如何封装类的问题,欢迎高手进来讨论!!!
- 高分请教:怎样抓到QQ的信息包?
- 编译出错,请高手帮忙!!
- vc的CRecorderset类怎么这么烂,help!!!!
- 如何修改文档视图的标题
- 请问各位 *.mir 是什么文件?
请问究竟怎么样才能得到程序的当前路径?又怎么才能加上自已的目录名?能不能说的详细一点啊,给点代码也好啊
代码说明一切!!
GetModuleFileNameEx或GetModuleBaseName。
然后据此产生自己的目录。
char EXEDirectory[MAX_PATH];
memset(EXEDirectory,0,MAX_PATH);
GetCurrentDirectory(MAX_PATH,EXEDirectory);你也可以把安装的路径写在注册表里面啊。从注册表读出来就可以了。
不能指定你的為固定目錄麼??
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:\test\test.exe分析取c:\test即可取得目录.也可以
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目录也去掉
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:\test\test.exe分析取c:\test即可取得目录.也可以
GetCurrentDirectory(...)
就是不知道怎么来实现啊
说详细一点啊!
:)我在此谢谢各位了先
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:\test\test.exe分析取c:\test即可取得目录.也可以
GetCurrentDirectory(...)
HKEY hKEY;
char data_Set[] = "AppDir"; //要设置的键值
char Key[] = "路径"
long ret;
DWORD Regtype=REG_SZ;
ret=(::RegOpenKeyEx(HKEY_LOCAL_MACHINE, data_Set, 0, KEY_WRITE, &hKEY));
if(ret!=ERROR_SUCCESS)
{
return 1;
} ret=::RegSetValueEx(hKEY, Key, NULL,Regtype,
(const unsigned char *)KeyVal,strlen(KeyVal));
if(ret!=ERROR_SUCCESS)
{
return 1;
}
::RegCloseKey(hKEY);
return 0;读取类似。
不过最好再安装程序安装的时候写入键值。
然后再需要的时候再程序里面直接读。
data_set应该是注册表里面的路径,比如"Software\\YourApp"
Key是要设置的键值。比如“AppDir”
KeyVal是写入的值。比如"c:\\program files\\yourapp"
如何去掉文件名呢?请教各位了
可能你不知道啊,我要求我的程序不光是能读写data目录中的数据文件,还要它能够读写用户硬盘上所有相同格式的文件,正是如此才产生了上述问题:)to johnic(johnic) :
你好,能不能说的详细一点啊,究竟有那些API专门用来处理字串?能部能给些提示代码?
对字符串的处理我是一窍不通啊
可能你不知道啊,我要求我的程序不光是能读写data目录中的数据文件,还要它能够读写用户硬盘上所有相同格式的文件,正是如此才产生了上述问题:)to johnic(johnic) :
你好,能不能说的详细一点啊,究竟有那些API专门用来处理字串?能部能给些提示代码?
对字符串的处理我是一窍不通啊
赋值path[strlen(path)-8] = '\0' (test.exe长度是8)
然后path里面就是"c:\test"