プログラミング関連の話題・質問用のスレッド。 Atom 1.0

※ブラウザによっては新しい書き込みが表示されない場合があるようなので、返信が表示されていない場合はF5または更新ボタンでページを更新してください。

:ID:cipeco0y

プログラミング以外の話題はロビーのスレッドでお願いします。
ツールのソースについての質問などはこちらでも構いません。

:ID:vZ7YOR5H

はじめまして。
VisualBASICを使ってバイナリでファイルの入出力を行うサンプルなどを探していて、こちらのサイトにたどり着きました。
説明も解りやすく、サンプルも簡潔で非常に助かりました。
ただ一点どうも思った動作にならないので、自分で別なサンプルを作成したり、MSDNを読んだりしたところ、間違っているようなのでこちらに記載させて頂きます。

BinaryReaderクラス・BinaryWriterクラス
http://smdn.jp/programming/netfx/stream/3_binaryreader_binarywriter/
の中のバイト配列の読み込み (ReadBytes, Read)には
「ReadInt32等のメソッドと同様、ReadBytesメソッドでストリームの残りバイト数よりも多いバイト数を読み込もうとした場合には、例外EndOfStreamExceptionがスローされます。」 

と記載がありますが、スローされませんでした。
このため自分が作成したサンプルで、Try Catchとして、ファイル末尾を判断して処理するようにしましたが、Catchされませんでした。

MSDNのBinaryReader.ReadBytes メソッドにも
http://msdn.microsoft.com/ja-jp/library/system.io.binaryreader.readbytes%28v=vs.95%29.aspx

例外の中にEndOfStreamExceptionの記述がありませんでした。

よろしくおねがいします。
今後もいろいろと参考にさせて頂きます。
ありがとうございます。

:ID:Q4FXA/AS

>>30
BinaryReader.ReadBytesメソッドの動作についてですが、ご指摘頂いた通り
記述されている内容が誤りがありました。

正しくは「ReadBytesメソッドではEndOfStreamExceptionがスローされることはなく、
実際に読み込めた分の長さのバイト配列が返される」となります。

従って、ReadBytesを呼び出す場合はEndOfStreamExceptionがCatchされることはありません。
ファイル末尾に達したかどうかの判断は、ReadBytesが返す配列の長さが
引数で指定したバイト数よりも少ないかどうかで調べることができます。

当該ページの記載内容も修正いたしました。 ご指摘ありがとうございました。

:ID:GM8sbjMe

今でも自分は引っ込み思案なところがあるようで、バグ報告を躊躇う。
何人かにちょろっと話題を出したりすることはあっても(ここに書くのもその一環)、自分ではあまり報告しないのだ。【以下、無関係な話が続くので最後の1行までジャンプ】

LibreOfficeにはStarBasicというマクロ用の言語がついており、COMっぽい仕掛けを多用すること以外の文法的なことはVBA/VBSに似せようと(もともとBasic系共通なのかもしれないが)している気がする。文法書ないんだけどね。

VBAで#を使うケースで俺がポンと出てくるのが、

   Doubleの型指定子: http://msdn.microsoft.com/en-us/library/office/gg264155%28v=office.15%29.aspx
   ファイルIO: http://msdn.microsoft.com/en-us/library/office/gg264163%28v=office.15%29.aspx
   日付リテラル: http://msdn.microsoft.com/en-us/library/office/gg278460%28v=office.15%29.aspx

の3つだ。

さて、StarBasicでこんなコードを書いてみよう。

Sub Main()
Dim x As Date
Dim y As Date
x = #1/2/2013#
y = 1/2/2013
Msgbox(x <> y)
End Sub

Dateが日数単位のDoubleならば、当然x > 1かつ、yは単なる割り算だからy < 1でこの二つが一致するわけがないし、実際VBAではMsgboxはTrueを表示する。(つまり期待通り等しくない)
StarBasicではFalseである。

コンパイラのソース見てみようか。
http://opengrok.libreoffice.org/xref/core/basic/source/comp/scanner.cxx#406
これはそれほどおかしいと思わなかった。
http://opengrok.libreoffice.org/xref/core/basic/source/comp/scanner.cxx#242
bHashって何のためにあるんだろうねー。
http://opengrok.libreoffice.org/xref/core/basic/source/comp/scanner.cxx#481
VBAのリテラルって#で囲まれているんだよね…文字列ルーチンを再利用してしまおうか…何か上の方にあるelse ifあたりの条件足りなくないか?

と、ここまでが無関係な発端。いやmonoのvbncはどう解釈するのかなって話が(凄く短いけど)メイン。
http://ideone.com/HYXMKw
このエラーはどうなんだろう。vbcは演算子が定義されていないというが

:ID:18I6Xog9

「ファイル・ディレクトリの操作」のサンプルソースには下記の構文エラーが発生したので、ご連絡させていただきます。
URL:
http://smdn.jp/programming/netfx/filesystem/1_filesystem/

ーーーーーーーーーー

   // カレントディレクトリにあるfile2.txtをディレクトリE:\dir\に移動する
   File.Move("file2.txt", @"E:\dir\"); //★★エラー

ーーーーーーーーーー

:ID:+LyRQS9z

ご報告ありがとうございます。
検証したところご指摘のC#コードには文法上の問題はないことを確認しております。

  • >>1と入力すると1番へのアンカーになります。
  • 投稿内容はPukiWiki記法で整形されます。
    • 以下のPukiWiki記法が使えます。
      • 引用文
      • 番号付きリスト、番号なしリスト、定義リスト
      • 整形済みテキスト
        • 複数行のコードブロック・コマンド出力を書き込むには#code{{〜}}、#prompt{{〜}}と記入してください。
        • AAを書き込むには#aa{{〜}}と記入してください。
      • 表組み
      • 見出し
      • 強調・斜体、取り消し線・下線
      • 文字色(&color)、文字サイズ(&size)
      • 注釈
    • URL・メールアドレスは自動的にリンクになります。
    • 詳しくはPukiWikiのFormattingRulesを参照してください。
  • 書き込み後に投稿内容を編集することは出来ません。