Как проверить, существует ли файл и читаем в C++?

Массивы являются счетными, таким образом, Ваш foo уже IEnumerable самостоятельно. Просто используйте методы последовательности LINQ как Take() для получения то, что Вы хотите из него (не забывайте включать Linq пространство имен с using System.Linq;):

byte[] foo = new byte[4096];

var bar = foo.Take(41);

при реальной необходимости в массиве от какого-либо IEnumerable значение Вы могли бы использовать ToArray() метод для этого. Это, кажется, не имеет место здесь.

63
задан Drew Chapin 5 October 2012 в 05:27
поделиться

4 ответа

Я бы, вероятно, выбрал:

ifstream my_file("test.txt");
if (my_file.good())
{
  // read away
}

Метод good проверяет, готов ли поток к чтению.

82
ответ дан 24 November 2019 в 16:16
поделиться

Вы можете использовать Boost.Filesystem . У него есть функция boost :: filesystem :: exist .

Я не знаю, как насчет проверки прав доступа на чтение. Вы также можете посмотреть в Boost.Filesystem . Однако, скорее всего, не будет другого (переносимого) способа, кроме как попытаться прочитать файл.

22
ответ дан 24 November 2019 в 16:16
поделиться

если вы используете unix, то access () может сказать вам, читается ли он. Однако, если ACL используются, это становится более сложным, в этом случае лучше просто открыть файл с помощью ifstream и попробовать прочитать ... если вы не можете прочитать, ACL может запретить чтение.

10
ответ дан 24 November 2019 в 16:16
поделиться

Какая операционная система / платформа?

В Linux / Unix / MacOSX вы можете использовать fstat .

В Windows вы можете использовать GetFileAttributes .

Обычно нет переносимого способа сделать это с помощью стандартных функций ввода-вывода C / C ++.

11
ответ дан 24 November 2019 в 16:16
поделиться
Другие вопросы по тегам:

Похожие вопросы: