كيفية الحصول على الدليل الحالي في برنامج C؟

StackOverflow https://stackoverflow.com/questions/298510

  •  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.

مرخصة بموجب: CC-BY-SA مع الإسناد
لا تنتمي إلى StackOverflow
scroll top