none
Как заставить GetFileAttributes() распозновать относительные пути к существующим папкам? RRS feed

  • Вопрос

  • Здравствуйте.

    В консольном приложении Visual C++ в MS VS 2013 нужно проверить существование папки. Делаю это следующим образом:

    int _tmain(int argc, _TCHAR* argv[])
    {
         string folderPath = argv[1];
    
         if (GetFileAttributes(folderPath.c_str()) == FILE_ATTRIBUTE_DIRECTORY)
         {
              // Некоторые действия
         }
         else
         {
              // Некоторые действия
         }
    
         return 0;
    }
    Но GetFileAttributes() выдаёт результат FILE_ATTRIBUTE_DIRECTORY (0x10) если только я передаю ей абсолютный путь к существующей папке. Например:"M:\MS_VS2013_Projects\WordsCounter\Debug\TextFiles_to_Test", где M - это имя жёсткого диска. Если же я передаю ей относительный путь к существующей папке, например: "M:TextFiles_to_Test", то она возвращает результат, равный 4294967295.

    Как добиться того, что бы GetFileAttributes() находила существующую папку при указании к ней относительного пути?

    11 декабря 2014 г. 11:51

Ответы

  • Как добиться того, что бы GetFileAttributes() находила существующую папку при указании к ней относительного пути?

    Как следует из названия, путь указывается ОТНОСИТЕЛЬНО другого пути. А какого именно пути, Вы не задумывались? У приложения Windows есть характеристика "текущий каталог". Так вот, относительный путь "отсчитывается" именно от этого текущего каталога. Эта характеристика является переменной величиной (в процессе работы приложения может изменяться). Кроме того процесс-родитель (тот, который запускает Вашу программу) также может устанавливать его (каталог) по своему усмотрению. Проводник Windows - по своему, а VS - по своему.

    Вывод. Указывая относительный путь Вы должны быть уверены, в момент вызова GetFileAttributes текущий каталог ВСЕГДА один и тот же. Вы сможете это гарантировать?


    Если сообщение помогло Вам, пожалуйста, не забудьте отметить его как ответ данной темы. Удачи в программировании!

    • Помечено в качестве ответа Purple_Apple 11 декабря 2014 г. 17:48
    11 декабря 2014 г. 15:31

Все ответы

  • Как добиться того, что бы GetFileAttributes() находила существующую папку при указании к ней относительного пути?

    Как следует из названия, путь указывается ОТНОСИТЕЛЬНО другого пути. А какого именно пути, Вы не задумывались? У приложения Windows есть характеристика "текущий каталог". Так вот, относительный путь "отсчитывается" именно от этого текущего каталога. Эта характеристика является переменной величиной (в процессе работы приложения может изменяться). Кроме того процесс-родитель (тот, который запускает Вашу программу) также может устанавливать его (каталог) по своему усмотрению. Проводник Windows - по своему, а VS - по своему.

    Вывод. Указывая относительный путь Вы должны быть уверены, в момент вызова GetFileAttributes текущий каталог ВСЕГДА один и тот же. Вы сможете это гарантировать?


    Если сообщение помогло Вам, пожалуйста, не забудьте отметить его как ответ данной темы. Удачи в программировании!

    • Помечено в качестве ответа Purple_Apple 11 декабря 2014 г. 17:48
    11 декабря 2014 г. 15:31
  • И, кстати, строка вида "M:TextFiles_to_Test" не является относительным путем (и, вообще, путевым именем).

    Если сообщение помогло Вам, пожалуйста, не забудьте отметить его как ответ данной темы. Удачи в программировании!


    • Изменено kosuke904 11 декабря 2014 г. 15:33 уточнение
    11 декабря 2014 г. 15:32
  • А как же быть в следующем случае: в текущей папке существует папка, например, с именем GoodFolder. Я передаю функции GetFileAttributes()  только строку "GoodFolder". Она вернёт тогда  FILE_ATTRIBUTE_DIRECTORY?
    11 декабря 2014 г. 15:48
  • Да, должна.

    Если сообщение помогло Вам, пожалуйста, не забудьте отметить его как ответ данной темы. Удачи в программировании!

    11 декабря 2014 г. 16:36