Udostępnij za pośrednictwem


Zmienianie bieżącego katalogu

Katalog na końcu aktywnej ścieżki jest nazywany bieżącym katalogem; jest to katalog, w którym uruchomiono aktywną aplikację, chyba że została jawnie zmieniona. Aplikacja może określić, który katalog jest bieżący, wywołując funkcję GetCurrentDirectory. Czasami konieczne jest użycie funkcji GetFullPathName, aby upewnić się, że litera dysku jest dołączona, jeśli aplikacja tego wymaga.

Notatka

Mimo że każdy proces może mieć tylko jeden bieżący katalog, jeśli aplikacja przełącza woluminy przy użyciu funkcji SetCurrentDirectory, system zapamiętuje ostatnią bieżącą ścieżkę dla każdego woluminu (litera dysku). To zachowanie wystąpi tylko wtedy, gdy podczas zmiany bieżącego katalogu na inny wolumin określimy literę dysku bez podania pełnej ścieżki. Dotyczy to operacji Get lub Set.

 

Aplikacja może zmienić bieżący katalog, wywołując funkcję SetCurrentDirectory.

W poniższym przykładzie pokazano użycie GetCurrentDirectory i 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);
}