Как проверить, могу ли я написать имя файла? - PullRequest
1 голос
/ 21 февраля 2011

Название может показаться тривиальным, но это не так просто, как кажется. Вы не можете просто проверить разрешения для файла, потому что файл может не существовать, и у вас могут быть необходимые разрешения для его создания и последующей записи в него. Но только если у вас есть разрешения на запись в каталог, и, возможно, разрешения на выполнение, и, возможно, разрешения для всех родительских каталогов. А может и нет. Я не уверен.

Итак, учитывая имя файла, каковы все случаи, которые мне нужно учитывать, чтобы правильно проверить, могу ли я открыть и записать файл с таким именем файла? Это не относится к какому-либо одному языку программирования. Я просто хочу логику. Но примеры на реальных языках программирования приветствуются.

Ответы [ 2 ]

2 голосов
/ 21 февраля 2011

Такой тест не обязательно будет очень полезен - вы просто настраиваете себя на состояние гонки, если файл по какой-то причине перезаписывается между проверкой и попыткой записи.(Какой-то другой процесс может изменить разрешения, переместить или удалить родительский каталог, использовать последнее свободное место на устройстве и т. Д.)

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

0 голосов
/ 21 февраля 2011
  1. Это зависит от владельца процесса, который запускает программу, от того, есть ли у владельца разрешения на запись в этот каталог или нет. Например, apache, работающий от имени пользователя www, может не иметь возможности записи в каталог, принадлежащий root, и без прав доступа для другого пользователя или группы.

  2. Вы можете сделать это попутно или отследить, например, попытаться создать файл, чтобы увидеть, успешен он или нет, в случае, если он не может перехватить правильный код ошибки и, например, нет разрешения или каталог заполнен и предприняты корректирующие действия.

  3. Вы можете программно проверить, есть ли у пользователя разрешения на запись в каталог, если в каталоге есть место, если файл уже существует и т. Д. Используя определенный API-интерфейс, система предоставляет доступ к языку, и этот гораздо лучший подход, проявляя осторожность. случаев, а не обработки случаев отказа.

...