Модераторы: Partizan, gambit
  

Поиск:

Ответ в темуСоздание новой темы Создание опроса
> Типизированные файлы 
V
    Опции темы
Fedor
Дата 23.10.2008, 00:16 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Днепрянин
****


Профиль
Группа: Участник
Сообщений: 2090
Регистрация: 8.2.2003
Где: Великий

Репутация: нет
Всего: 32



САБЖ.

Нужно прочитать файл двойными словами (по 4 байта). Возможно ли это стандартными средставми C#? Или только читать по-байтово и потом из них делать один 4-х байтовый объект?


--------------------
Мы - Днепряне. Мы всех сильней.
PM ICQ   Вверх
Partizan
Дата 23.10.2008, 00:29 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Let's do some .NET
****


Профиль
Группа: Модератор
Сообщений: 2828
Регистрация: 19.12.2005
Где: Санкт-Петербург

Репутация: 8
Всего: 67



Fedor, FileStream.Read поможет.

Пример из MSDN:
Код

using System;
using System.IO;

class FSRead
{
    public static void Main()
    {
        //Create a file stream from an existing file.
        FileInfo fi=new FileInfo("c:\\csc.txt");       
        FileStream fs=fi.OpenRead();

        //Read 100 bytes into an array from the specified file.
        int nBytes=100;
        byte[] ByteArray=new byte[nBytes];
        int nBytesRead=fs.Read(ByteArray, 0, nBytes);
        Console.WriteLine("{0} bytes have been read from the specified file.", nBytesRead.ToString());
    }
}




--------------------
СУВ,
       Partizan.
PM MAIL WWW ICQ Skype GTalk Jabber   Вверх
Fedor
Дата 23.10.2008, 00:33 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Днепрянин
****


Профиль
Группа: Участник
Сообщений: 2090
Регистрация: 8.2.2003
Где: Великий

Репутация: нет
Всего: 32



Partizan, читаем внимательно вопрос.  По-байтово читать умею. Нужно читать по двойному слову (4 байта = int32).

Нашел два решения.
Первое - используя BitConverter
Код
      
             ArrayList a = new ArrayList();
             byte[] byteArray;
             byteArray = File.ReadAllBytes(szFileName);
              for (int i = 44; i < byteArray.Length; i+=4)
              {
                   a.Add(BitConverter.ToInt32(byteArray,i));
              }

Второе - используя BinaryReader
Код

         FileStream fs = new FileStream(spath, FileMode.Open, FileAccess.Read);
         int readvalue = 0;
         BinaryReader br = new BinaryReader(fs);
         readvalue = br.ReadInt32();



--------------------
Мы - Днепряне. Мы всех сильней.
PM ICQ   Вверх
Partizan
Дата 23.10.2008, 00:36 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Let's do some .NET
****


Профиль
Группа: Модератор
Сообщений: 2828
Регистрация: 19.12.2005
Где: Санкт-Петербург

Репутация: 8
Всего: 67



Fedor, ну из вопроса я понял, что необходима возможность читать блоками по 4 байта...

FileStream.Read как раз позволяет прочесть указанное число байт =)

Читаем очередные 4 байта и BitConverter-ом делаем из них Int.

Добавлено через 7 минут и 58 секунд
Небольшое добавление: MSDN таки пишет в Remarks к FileStream.Read:

Цитата

Use BinaryReader for reading primitive data types.



--------------------
СУВ,
       Partizan.
PM MAIL WWW ICQ Skype GTalk Jabber   Вверх
  
Ответ в темуСоздание новой темы Создание опроса
Прежде чем создать тему, посмотрите сюда:
Partizan
PashaPash

Используйте теги [code=csharp][/code] для подсветки кода. Используйтe чекбокс "транслит" если у Вас нет русских шрифтов.
Что делать если Вам помогли, но отблагодарить помощника плюсом в репутацию Вы не можете(не хватает сообщений)? Пишите сюда, или отправляйте репорт. Поставим :)
Так же не забывайте отмечать свой вопрос решенным, если он таковым является :)


Если Вам понравилась атмосфера форума, заходите к нам чаще! С уважением, mr.DUDA, Partizan, PashaPash.

 
1 Пользователей читают эту тему (1 Гостей и 0 Скрытых Пользователей)
0 Пользователей:
« Предыдущая тема | .NET для новичков | Следующая тема »


 




[ Время генерации скрипта: 0.1074 ]   [ Использовано запросов: 21 ]   [ GZIP включён ]


Реклама на сайте     Информационное спонсорство

 
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности     Powered by Invision Power Board(R) 1.3 © 2003  IPS, Inc.