Проверить символ как путь к файлу? - PullRequest
3 голосов
/ 15 октября 2011

Какой лучший способ определить, является ли символ допустимым путем к файлу?Таким образом, CheckFilePath( "my*file.csv") вернет FALSE (в Windows * недопустимый символ), тогда как CheckFilePath( "c:\\users\\blabla\\desktop\\myfile.csv" ) вернет TRUE.

Обратите внимание, что путь к файлу может быть действительным, но не существовать на диске.

Ответы [ 4 ]

2 голосов
/ 15 октября 2011

Это код, который save использует для выполнения этой функции:

 ....
 else file(file, "wb")
            on.exit(close(con))
        }
        else if (inherits(file, "connection")) 
            con <- file
        else stop("bad file argument")
 ......
1 голос
/ 15 октября 2011

Нет, нет способа сделать это (надежно).Я не вижу интерфейса операционной системы ни в Windows, ни в Linux, чтобы проверить это.Обычно вы пытаетесь создать файл и получить сообщение об ошибке, либо попытаться прочитать файл и получить сообщение типа «не существует».

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

Я не могу придумать причину, отличную от опроса ("Введите действительный полностью уточненныйПуть к файлу Windows: "), чтобы узнать это.

1 голос
/ 15 октября 2011

Возможно, file.exists() - это то, что вы ищете? Со страницы справки:

file.exists returns a logical vector indicating whether the files named by its argument exist.
(Here ‘exists’ is in the sense of the system's stat call: a file will be reported as existing only
if you have the permissions needed by stat. Existence can also be checked by file.access, which
might use different permissions and so obtain a different result. 

Также доступны несколько других функций для доступа к файловой системе компьютера, также на странице справки.

0 голосов
/ 19 октября 2018

Я бы предложил попробовать функцию checkPathForOutput, предлагаемую пакетом checkmate.Как указано в связанной документации, функция:

Проверьте [s], можно ли безопасно использовать путь к файлу для создания файла и записи в него.

Пример

checkmate::checkPathForOutput(x = tempfile(pattern = "sample_test_file", fileext = ".tmp"))
# [1] TRUE
checkmate::checkPathForOutput(x = "c:\\users\\blabla\\desktop\\myfile.csv")
# [1] TRUE

Неверный путь

\0 не должен использоваться в Linux 1 имена файлов:

checkmate::check_path_for_output("my\0file.csv")
# Error: nul character not allowed (line 1)

1 Не тестируется в Windows, но просмотр кода checkmate::check_path_for_output указывает на то, что функция должна работать корректно и в системе MS Windows.

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