C# と VB.NET の質問掲示板

ASP.NET、C++/CLI、Java 何でもどうぞ

C# と VB.NET の入門サイト

Re[1]: バイナリファイル読み込み


(過去ログ 60 を表示中)

[トピック内 4 記事 (1 - 4 表示)]  << 0 >>

■34685 / inTopicNo.1)  バイナリファイル読み込み
  
□投稿者/ sakura39 (11回)-(2009/04/06(Mon) 14:28:23)

分類:[.NET 全般] 

WindowsXP
VC# 2008 Express Edition

お世話になります。

バイナリファイルの読み込みですが、指定バイト分、シークしながら読み込みをしたいのですが、Readメソッドの場合、バッファのサイズは対象となるファイルサイズを指定しなくてはならず大きいファイルには使用できません。

ReadByteメソッドで1バイトずつバッファに読み込むしか方法はないのでしょうか。

よろしくお願いします。

引用返信 編集キー/
■34686 / inTopicNo.2)  Re[1]: バイナリファイル読み込み
□投稿者/ オショウ (140回)-(2009/04/06(Mon) 14:35:18)
2009/04/06(Mon) 14:35:49 編集(投稿者)
> ReadByteメソッドで1バイトずつバッファに読み込むしか方法はないのでしょうか。

        Using fi As FileStream = New FileStream("hoge.bin", FileMode.Open, FileAccess.Read)
            Using br As BinaryReader = New BinaryReader(fi)
                Dim bt() As Byte
                bt = br.ReadBytes(10)
                bt = br.ReadBytes(20)
                bt = br.ReadBytes(30)

                br.Close()
            End Using
            fi.Close()
        End Using

  これでは、ダメですか?

以上。参考まで

引用返信 編集キー/
■34688 / inTopicNo.3)  Re[1]: バイナリファイル読み込み
□投稿者/ επιστημη (1866回)-(2009/04/06(Mon) 14:49:15)
επιστημη さんの Web サイト
> Readメソッドの場合、バッファのサイズは対象となるファイルサイズを
> 指定しなくてはならず大きいファイルには使用できません。

んなこたーない。

/*
 * readme.cs : オノレ自身をバイナリで読んで16進ダンプ
 */
using System;
using System.IO;

class Program {
  public static void Main() {
    FileStream stream = new FileStream("readme.cs", FileMode.Open);
    int size = 16;
    byte[] buffer = new byte[size];
    int actual_read;
    do {
      actual_read = stream.Read(buffer, 0, size);
      for ( int i = 0; i < actual_read; ++i ) {
        Console.Write("{0} ", buffer[i].ToString("X2"));
      }
      Console.WriteLine();
    } while ( actual_read == size );
    stream.Close();
  }
}

引用返信 編集キー/
■34700 / inTopicNo.4)  Re[2]: バイナリファイル読み込み
□投稿者/ sakura39 (12回)-(2009/04/06(Mon) 16:33:48)
No34688 (επιστημη さん) に返信
> > Readメソッドの場合、バッファのサイズは対象となるファイルサイズを
>>指定しなくてはならず大きいファイルには使用できません。
>
> んなこたーない。
>
> /*
> * readme.cs : オノレ自身をバイナリで読んで16進ダンプ
> */
> using System;
> using System.IO;
>
> class Program {
> public static void Main() {
> FileStream stream = new FileStream("readme.cs", FileMode.Open);
> int size = 16;
> byte[] buffer = new byte[size];
> int actual_read;
> do {
> actual_read = stream.Read(buffer, 0, size);
> for ( int i = 0; i < actual_read; ++i ) {
> Console.Write("{0} ", buffer[i].ToString("X2"));
> }
> Console.WriteLine();
> } while ( actual_read == size );
> stream.Close();
> }
> }
>

オショウさん、επιστημη さん
ありがとうございます。

Readのオフセットについて勘違いしていました。
ファイル内のオフセットではなく、「読み取られるバイトが配置される array 内
のバイト オフセット」でした。

どうもありがとうございました。
無事解決しました。
解決済み
引用返信 編集キー/


トピック内ページ移動 / << 0 >>

このトピックに書きこむ

過去ログには書き込み不可

管理者用

- Child Tree -