How do I find the current directory?
Solution 1
Since you added the visual-c++ tag I'm going to suggest the standard windows function to do it. GetCurrentDirectory
Usage:
TCHAR pwd[MAX_PATH];
GetCurrentDirectory(MAX_PATH,pwd);
MessageBox(NULL,pwd,pwd,0);
Solution 2
Boost filesystem library provides a clean solution
current_path()
Solution 3
Use _getcwd
to get the current working directory.
Solution 4
This code works for Linux and 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());
}
Solution 5
Here's the most platform-agnostic answer I got a while ago:
How return a std::string from C's "getcwd" function
It's pretty long-winded, but does exactly what it's supposed to do, with a nice C++ interface (ie it returns a string, not a how-long-are-you-exactly?-(const
) char*
).
To shut up MSVC warnings about deprecation of getcwd
, you can do a
#if _WIN32
#define getcwd _getcwd
#endif // _WIN32
Comments
-
lital maatuk almost 2 years
I am trying to read a file which I read previously successfully. I am reading it through a library, and I am sending it as-is to the library (i.e. "myfile.txt"). I know that the file is read from the working/current directory.
I suspect that the current/working directory has changed somehow. How do i check what is the current/working directory?
-
monoceres about 11 yearsInteresting. Are you sure it doesn't just write the part that fits in the buffer?
-
yaobin about 11 yearsReally sorry... My program was incorrect.. I just deleted my comments so they wouldn't mislead others. I tested it again: If the buffer size specified is not large enough, the buffer will be kept unmodified and the desired size will be returned.
-
NN2 over 3 yearsIt doesn't work for me. Error: E1696 cannot open source file "unistd.h". The unistd.h file is not part of C or C++ (cplusplus.com/forum/beginner/59238)
-
heLomaN over 3 yearsRemember to add
#include <Windows.h>
to code file before this call. -
cup over 2 yearsOnly works if you are using gcc. Does not work if you are using visual studio