2008-11-18 46 views
116

Tôi đang tạo một chương trình C nơi tôi cần lấy thư mục mà chương trình được bắt đầu. Chương trình này được viết cho máy tính UNIX. Tôi đã xem opendir()telldir(), nhưng telldir() trả về một off_t (long int), vì vậy nó thực sự không giúp tôi.Cách lấy thư mục hiện tại trong chương trình C?

Làm thế nào tôi có thể lấy đường dẫn hiện tại trong một chuỗi (mảng char)?

Trả lời

218

Bạn đã xem getcwd() chưa?

#include <unistd.h> 
char *getcwd(char *buf, size_t size); 

ví dụ đơn giản:

#include <unistd.h> 
#include <stdio.h> 
#include <errno.h> 

int main() { 
    char cwd[1024]; 
    if (getcwd(cwd, sizeof(cwd)) != NULL) 
     fprintf(stdout, "Current working dir: %s\n", cwd); 
    else 
     perror("getcwd() error"); 
    return 0; 
} 
+8

Chọn một trong số những người thích nhất, có vẻ không cần thiết và chương trình báo cáo thành công ngay cả khi không thành công thông qua trạng thái thoát. Nếu không, một ví dụ tốt đẹp. –

+18

Ồ, và thông thường có sử dụng printf (...) thay cho fprintf (stdout, ...) không? –

+11

@JonathanLeffler: Đó không phải là những người yêu thích nhất. Đây là: 'int main()' nên là 'int main (void)'. –

59

Tra cứu trang hướng dẫn sử dụng cho getcwd.

+8

Tốt hơn cũng nên bao gồm đoạn mã ví dụ. – sudo

+4

@angad dạy cho một người đàn ông câu cá nhưng ít nhất cho anh ta thấy con đường dẫn đến hồ/biển/đại dương :) – mtk

+1

google> man :) –

9

Mặc dù câu hỏi được gắn thẻ Unix, người ta cũng có đến thăm nó khi nền tảng mục tiêu của họ là Windows, và câu trả lời dành cho Windows là GetCurrentDirectory() chức năng:

DWORD WINAPI GetCurrentDirectory(
    _In_ DWORD nBufferLength, 
    _Out_ LPTSTR lpBuffer 
); 

Các câu trả lời này áp dụng cho cả mã C và C++.

Liên kết được đề xuất bởi user4581301 trong câu hỏi comment cho một câu hỏi khác và được xác minh là lựa chọn hàng đầu hiện tại với trang web tìm kiếm của Google ': microsoft.com getcurrentdirectory'.

0

Lưu ý rằng getcwd(3) cũng có sẵn trong libc của Microsoft: getcwd(3) và hoạt động giống như cách bạn mong đợi.

Phải liên kết với -loldnames (oldnames.lib, được thực hiện tự động trong hầu hết các trường hợp) hoặc sử dụng _getcwd(). Phiên bản chưa được sửa lỗi không có sẵn trong Windows RT.

0
#include <stdio.h> /* defines FILENAME_MAX */ 
//#define WINDOWS /* uncomment this line to use it for windows.*/ 
#ifdef WINDOWS 
#include <direct.h> 
#define GetCurrentDir _getcwd 
#else 
#include <unistd.h> 
#define GetCurrentDir getcwd 
#endif 

int main(){ 
    char buff[FILENAME_MAX]; 
    GetCurrentDir(buff, FILENAME_MAX); 
    printf("Current working dir: %s\n", buff); 
    return 1; 
} 
Các vấn đề liên quan