Как объединить рабочий каталог с указанным пользователем файлом (w или w / o path), чтобы получить up-dir файла - PullRequest
0 голосов
/ 18 мая 2011

в данный момент я пишу что-то вроде lib, которое получает извне имя файла 'sFilename'.При этом данные были записаны в файл, который будет создан, данные были добавлены в существующий файл с данными, данные были обновлены в существующий файл с данными или данные были считаны из существующих данных.

Пользовательприложения с моей библиотекой должны получать как можно больше информации об ошибках обработки файлов.

Для этой цели я кодирую метод FileExists (...), который использует _stat () для определения, существует файл или нет, и метод "bool checkPermission (std :: string sFilename, CFile :: EOpenmode iOpenmode) "который возвращает bool, если указанный файл (sFilename) с iOpenmode (Read, Write, Readwrite) имеет разрешение на чтение, запись или чтение и запись.

Этот метод работает с _stat (sFilename.c_str (), & buf) тоже и возвращает нужную информацию о файле обратно в buf. * ​​1007 *

Перед проверкой какого-либо файла я хочу проверить, имеет ли каталог, содержащий указанный файл, требуемые разрешения и для этого я хочуиспользовать метод checkPermission [работает с _stat ()] для каталога!

Теперь проблема: как я могу легко определить содержащий каталог?Если пользователь просто задает имя файла «test.txt», файл будет создан или прочитан в рабочем каталоге.Так что легко получить up-каталог.Это так же, как рабочий каталог.(И там просто использовать checkPermission для получения подробной информации о каталоге).

Но что делать, когда пользователь не только дает имя файла?Например, ".... \ test.txt" или "dir1 \ dir2 \ test.txt".Как объединить рабочий каталог с определенным путем, чтобы получить up-каталог файла, а затем проверить права доступа?

Фу, я надеюсь, что все понятно, и это не слишком долго; -)

Rumo

Ответы [ 3 ]

0 голосов
/ 20 мая 2011

Я обнаружил, что _stat () и _access () на самом деле не работают для разрешений каталогов.См. эту страницу потока стека .

С _stat () вы не можете использовать ". \" Для получения информации о текущем каталоге.Но _access () по крайней мере может проверить, существует ли каталог ". \" Или ".. \".

В заключение я использую _access (), чтобы проверить существование каталога, и _stat (), чтобыпроверьте разрешения существующего файла.Если файл должен быть создан, я проверю его, выполнив.

И, между прочим ;-) Мне не нужно объединять рабочий каталог с указанным пользователем файлом, потому что я могу использовать только указанный файл в_access () чтобы определить, существует ли каталог.

Rumo

0 голосов
/ 20 мая 2011

Это пример кода Windows GetFileNameFromHandle, показывающий, как получить путь из HANDLE.Я думаю, это то, что вы ищете.

http://msdn.microsoft.com/en-us/library/aa366789%28v=vs.85%29.aspx

0 голосов
/ 18 мая 2011

Я бы предложил использовать библиотеку Boost FileSystem на www.boost.org.В частности, обратите внимание на класс path, который имеет такие методы, как make_absolute и parent_path.

...