如何找到当前目录?

16

我正在尝试读取一个我之前成功读取过的文件。 我通过一个库来读取它,而且我将其原样发送给库(即“myfile.txt”)。 我知道该文件是从工作/当前目录中读取的。

我怀疑当前/工作目录已经发生了改变。 如何检查当前/工作目录是什么?

6个回答

25

既然你加了 visual-c++ 标签,我会建议使用标准的 Windows 函数来完成它。GetCurrentDirectory

用法:

TCHAR pwd[MAX_PATH];
GetCurrentDirectory(MAX_PATH,pwd);
MessageBox(NULL,pwd,pwd,0);

有趣。你确定它没有只写入适合缓冲区的部分吗? - monoceres
非常抱歉...我的程序有误...我刚刚删除了我的注释,以免误导他人。我再次测试了一下:如果指定的缓冲区大小不够大,则缓冲区将保持不变,并返回所需的大小。 - yaobin
在调用此函数之前,请记得在代码文件中添加 #include <Windows.h> - heLomaN

8

6

使用_getcwd函数获取当前工作目录。


4
这是我之前得到的最通用的答案: 如何从 C 的 "getcwd" 函数返回 std::string 虽然有点冗长,但它确切地完成了它应该做的事情,并提供了一个漂亮的 C++ 接口(即返回字符串,而不是多长?(constchar*)。
为了消除 MSVC 对 getcwd 弃用的警告,可以执行以下操作:
#if _WIN32
    #define getcwd _getcwd
#endif // _WIN32

4

这段代码适用于Linux和Windows:

#include <stdio.h>  // defines FILENAME_MAX
#include <unistd.h> // for getcwd()
#include <iostream>

std::string GetCurrentWorkingDir();

int main()
{
   std::string str = GetCurrentWorkingDir();
   std::cout << str;
   return 0;
}
std::string GetCurrentWorkingDir()
{
    std::string cwd("\0",FILENAME_MAX+1);
    return getcwd(&cwd[0],cwd.capacity());
}

它对我不起作用。错误:E1696无法打开源文件“unistd.h”。unistd.h文件不是C或C++的一部分(http://www.cplusplus.com/forum/beginner/59238/)。 - NN2
1
只有在使用gcc时才有效。如果您使用的是Visual Studio,则无法使用。 - cup

0

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