كيفية الحصول على الدليل الحالي في برنامج C؟
-
08-07-2019 - |
سؤال
وأنا صنع برنامج C حيث كنت بحاجة للحصول على الدليل الذي يتم تشغيل البرنامج من. كتب هذا البرنامج لأجهزة الكمبيوتر UNIX. لقد كنت أبحث في opendir()
وtelldir()
، ولكن telldir()
بإرجاع off_t (long int)
، لذلك حقا لا يساعدني.
وكيف يمكنني الحصول على المسار الحالي في سلسلة (شار مجموعة)؟
المحلول
هل كان لديك نظرة على getcwd()
؟
#include <unistd.h>
char *getcwd(char *buf, size_t size);
ومثال بسيط:
#include <unistd.h>
#include <stdio.h>
#include <limits.h>
int main() {
char cwd[PATH_MAX];
if (getcwd(cwd, sizeof(cwd)) != NULL) {
printf("Current working dir: %s\n", cwd);
} else {
perror("getcwd() error");
return 1;
}
return 0;
}
نصائح أخرى
وابحث عن صفحة رجل لgetcwd
.
وعلى الرغم من أن السؤال هو الموسومة يونكس، والناس أيضا الحصول على زيارته عند منصة هدفهم هو ويندوز، والجواب ويندوز هو في GetCurrentDirectory()
وظيفة :
DWORD WINAPI GetCurrentDirectory(
_In_ DWORD nBufferLength,
_Out_ LPTSTR lpBuffer
);
وتنطبق هذه الإجابات إلى رمز كل من C و C ++.
في رابط اقترحه user4581301 في <لأ href = "https://stackoverflow.com/questions / 31487046 / الحصول على رأس الانتاج لمؤتمر نزع السلاح، أو ببساطة الحصول على رأس الحالي، دليل # comment50938605_31487046 "> تعليق لسؤال آخر، والتحقق من أنها الخيار الأفضل الحالي مع بحث جوجل الموقع :. microsoft.com getcurrentdirectory 'سوب>
#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;
}
لاحظ أن getcwd(3)
متاح في LIBC مايكروسوفت أيضا: <لأ href = "https://msdn.microsoft.com/en-us/library/sf98bd4y(v=vs.90).aspx" يختلط = "نوفولو noreferrer "> getcwd (3) ، ويعمل بنفس الطريقة التي تتوقعها.
ويجب ربط مع -loldnames
(oldnames.lib، والتي تتم تلقائيا في معظم الحالات)، أو استخدام _getcwd()
. النسخة غير المسبوقة ببادئة غير متوفر تحت ويندوز RT.