Массивы являются счетными, таким образом, Ваш foo
уже IEnumerable
самостоятельно. Просто используйте методы последовательности LINQ как Take()
для получения то, что Вы хотите из него (не забывайте включать Linq
пространство имен с using System.Linq;
):
byte[] foo = new byte[4096];
var bar = foo.Take(41);
при реальной необходимости в массиве от какого-либо IEnumerable
значение Вы могли бы использовать ToArray()
метод для этого. Это, кажется, не имеет место здесь.
Я бы, вероятно, выбрал:
ifstream my_file("test.txt");
if (my_file.good())
{
// read away
}
Метод good
проверяет, готов ли поток к чтению.
Вы можете использовать Boost.Filesystem . У него есть функция boost :: filesystem :: exist
.
Я не знаю, как насчет проверки прав доступа на чтение. Вы также можете посмотреть в Boost.Filesystem . Однако, скорее всего, не будет другого (переносимого) способа, кроме как попытаться прочитать файл.
если вы используете unix, то access () может сказать вам, читается ли он. Однако, если ACL используются, это становится более сложным, в этом случае лучше просто открыть файл с помощью ifstream и попробовать прочитать ... если вы не можете прочитать, ACL может запретить чтение.
Какая операционная система / платформа?
В Linux / Unix / MacOSX вы можете использовать fstat .
В Windows вы можете использовать GetFileAttributes .
Обычно нет переносимого способа сделать это с помощью стандартных функций ввода-вывода C / C ++.