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

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

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

Re[5]: バイナリファイルの書き込みに関して


(過去ログ 137 を表示中)

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

■80845 / inTopicNo.1)  バイナリファイルの書き込みに関して
  
□投稿者/ あ (19回)-(2016/08/14(Sun) 12:11:20)

分類:[.NET 全般] 



VB.NETに関してです。
web上で調べていると
バイト配列をバイナリファイルを書き込む方法として以下の二つが見つかりました。
これらの使い分けについて教えてください。


Using dest As New FileStream(strPath, FileMode.Create, FileAccess.Write)

dest.Write(buf, 0, buf.Length)

End Using


Using stream As Stream = New FileStream(strPath, FileMode.Create) 'ファイルが存在する場合、Createモードだと上書き、CreateNewだとエラー
Using writer As New BinaryWriter(stream)

writer.Write(buf)

End Using
End Using


前者は引数が3つ、後者は一つだけなので
前者を使った方が書き込み位置を指定できます。


両方とも
writer.Seek(buf.Length, SeekOrigin.Current)
で書き込み位置を指定することができますが
書き込み同時にseekもしたい場合には
前者を使い、
seekを別行で分けたい場合には
後者を使うのでしょうか?

FileStreamで書き込み位置を決めるのとseekで決めるのでは全く同じなのでしょうか?

書き込み速度などその他に違いがあれば教えてください。

引用返信 編集キー/
■80846 / inTopicNo.2)  Re[1]: バイナリファイルの書き込みに関して
□投稿者/ Hongliang (447回)-(2016/08/14(Sun) 12:26:47)
そもそも、Stream::Writeの第2引数および第3引数は、第1引数で渡したByte()のどの部分を書き込むかという指示です。Streamのどの位置に書き込むかではありません。
Stream自身が現在の書き込み/読み込み位置をPositionプロパティで保持しており、ReadおよびWriteは常にここから行われます。
// 大体、Streamは2GB以上を扱うこともあるので位置指定が32bitでは足りません。

また、BinaryWriter::WriteにもWrite(Byte(), Integer, Integer)というオーバーロードが用意されています。これはStream::Writeと全く同じ意味になります。

使い分けですが、個人的にはBinaryWriterは特に必要ないかなと思っています。
せめてエンディアンを指定できれば使い処もあったのですけど。
Stream::Write(Byte())が欲しくなることはありますが、拡張メソッド一つ定義するだけですし。
引用返信 編集キー/
■80847 / inTopicNo.3)  Re[2]: バイナリファイルの書き込みに関して
□投稿者/ あ (22回)-(2016/08/14(Sun) 13:01:28)
ありがとうございます。
3つの引数に関して勘違いしていました。
BinaryWriterよりもStreamをお勧めする理由なのですが
usingの行が一行で済むということだけでしょうか?
書き込み速度などその他の仕様は全く同じでしょうか?

引用返信 編集キー/
■80848 / inTopicNo.4)  Re[3]: バイナリファイルの書き込みに関して
□投稿者/ Hongliang (448回)-(2016/08/14(Sun) 14:44:47)
> BinaryWriterよりもStreamをお勧めする理由なのですが
> usingの行が一行で済むということだけでしょうか?
BinaryWriterが提供するメソッドに魅力を感じないからです。
これは私の個人的な嗜好なので、むしろ積極的に使いたい人もいるかも知れません。

> 書き込み速度などその他の仕様は全く同じでしょうか?
Byte()を書き込む以外はそもそも処理の内容が違うので、それらは比較できませんが。
とりあえずByte()を書き込む際の速度差は、考える意味はないでしょう。
引用返信 編集キー/
■80860 / inTopicNo.5)  Re[4]: バイナリファイルの書き込みに関して
□投稿者/ あ (24回)-(2016/08/15(Mon) 19:00:05)
ありがとうございます。

もう少し自分でもいろいろと試してみようと思います。
 
引用返信 編集キー/
■80861 / inTopicNo.6)  Re[5]: バイナリファイルの書き込みに関して
□投稿者/ あ (25回)-(2016/08/15(Mon) 19:00:18)
No80860 (あ さん) に返信
> ありがとうございます。
>
> もう少し自分でもいろいろと試してみようと思います。
>  
解決済み
引用返信 編集キー/


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

このトピックに書きこむ

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

管理者用

- Child Tree -