Поделиться через


Изменение текущего каталога

Каталог в конце активного пути называется текущим каталогом; это каталог, в котором запущено активное приложение, если оно не было явно изменено. Приложение может определить текущий каталог, вызвав функцию GetCurrentDirectory . Иногда необходимо использовать функцию GetFullPathName , чтобы убедиться, что буква диска включена, если она требуется приложению.

Примечание

Хотя каждый процесс может иметь только один текущий каталог, если приложение переключает тома с помощью функции SetCurrentDirectory , система запоминает последний текущий путь для каждого тома (букву диска). Это поведение будет проявляться только при указании буквы диска без полного пути при изменении текущей точки ссылки каталога на другой том. Это относится к операциям Get или Set.

 

Приложение может изменить текущий каталог, вызвав функцию SetCurrentDirectory .

В следующем примере демонстрируется использование GetCurrentDirectory и SetCurrentDirectory.

#include <windows.h> 
#include <stdio.h>
#include <tchar.h>

#define BUFSIZE MAX_PATH
 
void _tmain(int argc, TCHAR **argv) 
{ 
   TCHAR Buffer[BUFSIZE];
   DWORD dwRet;

   if(argc != 2)
   {
      _tprintf(TEXT("Usage: %s <dir>\n"), argv[0]);
      return;
   }

   dwRet = GetCurrentDirectory(BUFSIZE, Buffer);

   if( dwRet == 0 )
   {
      printf("GetCurrentDirectory failed (%d)\n", GetLastError());
      return;
   }
   if(dwRet > BUFSIZE)
   {
      printf("Buffer too small; need %d characters\n", dwRet);
      return;
   }

   if( !SetCurrentDirectory(argv[1]))
   {
      printf("SetCurrentDirectory failed (%d)\n", GetLastError());
      return;
   }
   _tprintf(TEXT("Set current directory to %s\n"), argv[1]);

   if( !SetCurrentDirectory(Buffer) )
   {
      printf("SetCurrentDirectory failed (%d)\n", GetLastError());
      return;
   }
   _tprintf(TEXT("Restored previous directory (%s)\n"), Buffer);
}