
25.4. Переміщення каталога
Так само як і файли, каталоги можна переміщати за допомогою функції MoveFile(). У цьому випадку на виконання функції MoveFile() накладається одне обмеження, яке полягає в тому, що можна переміщати тільки каталоги, які знаходяться на одному диску. Нагадаємо, що функція MoveFile() має наступний прототип:
BOOL MoveFile(
LPCTSTR IpExistingFileName, // ім'я існуючого файла
LPCTSTR lpNewFileName); // ім'я нового файла
При успішному завершенні функція повертає ненульове значення, інакше - false. При переміщенні каталогів параметри IpExistingFileName і lpNewFileName повинні вказувати на рядки, які містять імена переміщуваного і нового каталогів відповідно.
У лістингу 25.6 приведена програма, яка виконує переміщення каталога, використовуючи функцію MoveFile().
// Лістинг 25.6. Переміщення каталога
#include "stdafx.h"
Int main()
{
wchar_t lpszOldDirectoryName[] = L"C:\\Users\\Shogun\\Documents\\demo_dir";
wchar_t lpszNewDirectoryName[] = L"C:\\Users\\Shogun\\Documents\\new_dir";
// переміщаємо каталог
if(!MoveFile(lpszOldDirectoryName, lpszNewDirectoryName))
{
std::cerr << "Move file failed." << std::endl
<< "The last error code: " << GetLastError() << std::endl;
std::cout << "Press any key to finish.";
std::cin.get();
return 0;
}
std::cout << "The directory is moved." << std::endl;
std::cin.get();
return 0;
}
25.5. Визначення і встановлення поточного каталога
Каталог, з якого стартує застосування, називається поточним каталогом цього застосування. Зазвичай, в поточному каталозі знаходяться потрібні для роботи застосування, виконувані файли і бібліотеки. Визначити ім’я поточного каталога можна за допомогою функції GetCurrentDirectory(), яка має наступний прототип:
DWORD GetCurrentDirectory(
DWORD nBufferLength, // довжина буфера для імені каталога
LPTSTR lpBuffer); // адреса буфера для імені каталога
Якщо розмір буфера достатній для імені поточного каталога, то функція GetCurrentDirectory() при успішному завершенні повертає число символів, записаних в буфер, на який вказує параметр lpBuffer, інакше - 0. Якщо ж розмір буфера недостатній для імені каталога, то функція GetCurrentDirectory() повертає потрібну довжину буфера для імені поточного каталога, включаючи завершальний порожній символ.
У параметрі nBufferLength повинна бути задана довжина буфера, куди функція GetCurrentDirectory() записує ім’я поточного каталога.
Параметр lpBuffer повинен вказувати на буфер, куди функція GetCurrentDirectory() записує ім’я поточного каталога.
Застосування може змінити ім'я поточного каталога, використовуючи функцію SetCurrentDirectory(), яка має наступний прототип:
BOOL SetCurrentDirectory(
LPCTSTR lpPathName); // ім’я нового поточного каталога
При успішному завершенні функція SetCurrentDirectory() повертає ненульове значення, інакше - false.
Параметр lpPathName повинен вказувати на символьний рядок, який містить ім’я нового поточного каталога.
У лістингу 25.7 приведена програма, яка визначає ім’я поточного каталога, а потім встановлює новий каталог як поточний каталог.
// Лістинг 25.7. Визначення і встановлення поточного каталога
#include "stdafx.h"