Разбор пути с использованием functoin под названием getfullpathname () в C? - PullRequest
0 голосов
/ 01 апреля 2019

Я новичок в C, в настоящее время должен изучить C и Win32 API, и в моем первом проекте мне нужно получить от пользователя путь и имя файла, затем проверить, существует ли файл, и удалить его, если пользователь хочетto.

В настоящее время я застрял в поиске, существует ли файл.Я знаком с решением, которое было показано на этом сайте ранее ( Какой лучший способ проверить, существует ли файл в C? ), но мне подсказали / дали указание использовать функцию getfullpathname () дляпроанализировать строки и затем проверить, существует ли введенный файл.Моя проблема в том, что все, что делает GetFullPathName, насколько я искал (пытался понять MSDN и пару или более сайтов), объединяет рабочий диск и каталог с указанным вами именем файла.Я что-то пропустил?Нужно ли изменить рабочий каталог на введенный путь, чтобы объединить путь и файл имени, или просто передать функции путь для его анализа, чтобы я мог выполнить проверку?Нужна ли мне эта функция только для разбора пути или для конкатенации строки пути и строки имени?Не могли бы вы дать мне пример выполнения этой первой части проекта?

Заранее спасибо.

Ответы [ 2 ]

0 голосов
/ 02 апреля 2019

Хммм, согласно моей практике

Предполагая, что файл находится в текущем рабочем каталоге, GetFullPathName звучит как хорошая идея.Он принимает имя файла и преобразует его в полный путь, предварительно установив текущий рабочий каталог.

Примечание. API возвращает путь независимо от того, существует файл в рабочем каталоге или нет;он использует только предоставленное вами имя файла и заранее подготавливает текущий рабочий каталог.

DEMO1:

#include <windows.h>

int main()
{
   char filename[] = "test.txt";
   char fullFilename[MAX_PATH];
   GetFullPathName(filename, MAX_PATH, fullFilename, nullptr);
   MessageBox(NULL, fullFilename, "DEBUG", MB_OK);
}

Результат отладки:

Messagebox

На самом деле тестов нет.Текстовый документ вообще.

Таким образом, вы можете сделать это следующим образом

DEMO2:

#include <windows.h>

int main()
{
   char lpszPath[] = "..\\Project20";
   long     length = 0;
   TCHAR*   buffer = NULL;

   buffer = new TCHAR[length];
   length = GetShortPathName(lpszPath, buffer, length);

   if (length == 0)
   {
     MessageBox(NULL, "ERROR", "DEBUG", MB_OK);
   }
   else
   {
     MessageBox(NULL, "SUCCESS", "DEBUG", MB_OK);
   }
   delete[] buffer;

   return 0;
}

Суждение оналичие документов через ОШИБКУ и УСПЕХ file loaction

SUCCESS

0 голосов
/ 02 апреля 2019

объединяет рабочий диск и каталог с указанным вами именем.

Не простая конкатенация. Эта функция не проверяет, существует ли файл, а просто анализирует относительный путь файла (независимо от того, существует ли файл) и абсолютный путь. Первый параметр Function GetFullPathName - это относительный путь к файлу, который необходимо вставить. Если файл находится в текущем рабочем каталоге, вам нужно только отправить filename для вызова функции. Если файл находится в верхнем пути, то вы можете отправить ../filename, функция проанализирует его по абсолютному пути к файлу.

Вы можете использовать GetShortPathName . Если файл не существует, вызов завершится ошибкой и вернет 0.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...