Версия для печати темы
Нажмите сюда для просмотра этой темы в оригинальном формате
Форум программистов > .NET для новичков > Типизированные файлы


Автор: Fedor 23.10.2008, 00:16
САБЖ.

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

Автор: Partizan 23.10.2008, 00:29
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());
    }
}


Автор: Fedor 23.10.2008, 00:33
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();

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

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

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

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

Цитата

Use BinaryReader for reading primitive data types.

Powered by Invision Power Board (http://www.invisionboard.com)
© Invision Power Services (http://www.invisionpower.com)