Я разработал программу, которая представляет собой простой файловый менеджер. Например, он позволяет пользователю создать файл, удалить файл, просмотреть атрибут файлов, изменить каталог и т. Д. c на основе пути CIFS. Однако я обнаружил проблему, когда реализовал команду cd.
Я определил глобальную переменную, которая будет инициализирована новым путем, когда я вызову FmCommandChangeDirectory. Теперь я хотел проверить наличие каталога / папки, прежде чем менять глобальный рабочий путь на новый каталог. Я реализовал следующую функцию, но она не может узнать, существует папка или нет.
bool ChangePathRoot(const char* arg_computer_name)
{
strcpy_s(g_c_RootDrive, "C:\\");
strcpy_s(g_c_CurrentPath, "\\\\");
strcat(g_c_CurrentPath, arg_computer_name);
strcpy_s(g_c_ShareName, "\\C$");
strcat(g_c_CurrentPath, g_c_ShareName);
strcpy_s(g_c_SystemModifiablePath, "\\");
strcat(g_c_CurrentPath, g_c_SystemModifiablePath);
return true;
}
void ChangePathReverseBack(const char* arg_computer_name)
{
char c_PathBuffer[_MAX_PATH];
char c_Drive[_MAX_DRIVE];
char c_DirectoryMain[_MAX_DIR], c_DirectoryTemp[_MAX_DIR];
char c_Filename[_MAX_FNAME];
char c_Extension[_MAX_EXT];
strcpy(c_PathBuffer, g_c_CurrentPath);
_splitpath(c_PathBuffer, c_Drive, c_DirectoryMain, c_Filename, c_Extension);
_splitpath(c_PathBuffer, c_Drive, c_DirectoryTemp, c_Filename, c_Extension);
char* c_MainToken = strtok(c_DirectoryMain, "\\");
int i_StringsCounter = 0;
while (c_MainToken != NULL)
{
c_MainToken = strtok(NULL, "\\");
i_StringsCounter++;
}
char* c_TempToken = strtok(c_DirectoryTemp, "\\");
int i_StringsCounterTemp = i_StringsCounter - 1;
char c_FinalModifiedPath[MAX_PATH];
strcpy(c_FinalModifiedPath, "\\\\");
for (size_t i = 0; i < i_StringsCounterTemp; i++)
{
strcat(c_FinalModifiedPath, c_TempToken);
strcat(c_FinalModifiedPath, "\\");
c_TempToken = strtok(NULL, "\\");
}
char* c_TokenBase = NULL;
char* c_TokenDir = NULL;
c_TokenBase = strtok_s(c_FinalModifiedPath, "\\", &c_TokenDir);
char* c_TokenRoot = NULL;
char* c_TokenDirectory = NULL;
c_TokenRoot = strtok_s(c_TokenDir, "$", &c_TokenDirectory);
ChangePathSecondary(c_TokenRoot, arg_computer_name, c_TokenDirectory);
}
bool ChangePathRelative(const char* arg_directory)
{
strcat(g_c_SystemModifiablePath, arg_directory);
strcat(g_c_SystemModifiablePath, "\\");
strcat(g_c_CurrentPath, arg_directory);
strcat(g_c_CurrentPath, "\\");
return true;
}
void FmCommandChangeDirectory(const char* arg_computer_name)
{
char c_PathBuffer[_MAX_PATH];
char c_Drive[_MAX_DRIVE];
char c_DirectoryMain[_MAX_DIR];
char c_Filename[_MAX_FNAME];
char c_Extension[_MAX_EXT];
scanf_s("%s", c_PathBuffer, MAX_PATH - 1);
_splitpath(c_PathBuffer, c_Drive, c_DirectoryMain, c_Filename, c_Extension);
if (!strcmp(c_PathBuffer, "\\") || !strcmp(c_PathBuffer, "/"))
{
ChangePathRoot(arg_computer_name);
}
else if (!strcmp(c_PathBuffer, ".."))
{
ChangePathReverseBack(arg_computer_name);
}
else
{
ChangePathRelative(c_PathBuffer);
}
}
Теперь я хотел реализовать функцию, которая проверяет существующий путь (каталог) или нет, но я не знаю, как я могу реализовать такую функцию, чтобы проверить, существует ли каталог или нет.