如何获取当前目录?

103

我想在当前目录(即可执行文件所在的位置)创建一个文件。

我的代码:

LPTSTR NPath = NULL;
DWORD a = GetCurrentDirectory(MAX_PATH,NPath);
HANDLE hNewFile = CreateFile(NPath,GENERIC_WRITE,0,NULL,CREATE_ALWAYS,FILE_ATTRIBUTE_NORMAL,NULL);

我在使用GetCurrentDirectory()时遇到了异常。

为什么会出现异常?


3
#include <unistd.h> char *getcwd(char *buf, size_t size);这段代码是C语言中用于获取当前工作目录的函数。使用该函数需要包含头文件"unistd.h",传入一个指向字符数组的指针buf和数组长度size。函数会将当前工作目录的路径名存储在buf中,并返回该指针。如果执行成功,函数返回值与buf相同;否则,返回NULL。 - Anuswadh
5
请注意:当前目录并不总是exe所在的目录。(例如:c:\users\me> \dir1\dir2\runme.exe,这时你在 c:\users\me 目录下运行位于 \dir1\dir2\ 目录中的exe文件。) - Mercury
3
空指针 - 你会得到一个访问冲突。 - hfrmobile
1
你必须将两个参数都设置为零!!!为了确定所需的缓冲区大小,请将此参数设置为NULL,将nBufferLength参数设置为0。如果nBufferLength> 0且缓冲区指针为NULL-->可能会出现访问冲突。 - hfrmobile
1
由于空指针,可能会发生段错误 - 它没有指向任何内存,因此对其进行解引用可能会导致崩溃(这就是函数内发生的情况)。 - Gregor Hartl Watters
显示剩余4条评论
24个回答

-1

要找到可执行文件所在的目录,您可以使用以下命令:

TCHAR szFilePath[_MAX_PATH];
::GetModuleFileName(NULL, szFilePath, _MAX_PATH);

-2
String^ exePath = Application::ExecutablePath;<br>
MessageBox::Show(exePath);

问题没有明确说明是否是托管的,所以默认为未托管,请不要发布C++托管代码! - undefined

-2
在一个给定的 Windows C++ IDE 上,我采用了简陋的方式,它很简单、可靠,但速度较慢:
system( "cd" );

1
最好避免给人贬低其他答案的印象。 - Yunnosch
3
请让您比现有答案提供更明显的额外见解,例如 https://dev59.com/3HNA5IYBdhLWcg3wpvtg#71663339 - Yunnosch

-3
在Windows控制台中,您可以使用系统命令CD(当前目录):
std::cout << "Current Directory = ";
system("cd"); // to see the current executable directory

如何将数据存储到变量中? - undefined

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接