DOBON.NETプログラミング道掲示板
(現在 過去ログ2 を表示中)

[ 最新記事及び返信フォームをトピックトップへ ]

■33621 / inTopicNo.1)  CSV出力時に対象データバイト数+crlfの2バイト分のNull文字が出力される
  
□投稿者/ tom 一般人(1回)-(2017/05/11(Thu) 17:17:01)
  • アイコン環境/言語:[Windows 8.1 Pro 64bit、VB.NET(.Net Framework4.5] 
    分類:[.NET] 

    初めまして、tomといいます。

    ファイル出力処理にて、不可解な現象が発生しております。
    同じような経験をされた方がいらっしゃらないかと思い投稿いたします。

    以下のソースにより、CSVをファイルに出力を行っております。
    10ファイル×10回×200人×120日ほどの稼働しているうち、
    2ファイル× 1回× 1人× 1日の2ファイルだけ出力されたCSVが
    おかしくなっていました。

    出力内容を「"1","2","3"」とすると、出力内容のバイト数である11バイト数と
    改行コードの2バイトを足した13バイト分Null文字(0x00)がCSVファイルに
    出力されました。

    バイナリエディタで見ると以下のようになります。
    「22 31 22 2C 22 32 22 2C 22 33 22 0D 0A」(期待する値)
    「00 00 00 00 00 00 00 00 00 00 00 00 00」(出力された値)

    回避方法等ご存知の方がいらっしゃいましたら、
    ご回答いただけましたら幸いに存じます。
    よろしくお願いします。

    <ソース抜粋>
    Public Function WriterLines(ByVal lines As String()) As Boolean
    Try
    Using sw As New System.IO.StreamWriter(Me.filePath, True, System.Text.Encoding.GetEncoding(ShiftJIS))
    For Each line As String In lines
    sw.WriteLine(line)
    Next
    sw.Close()
    End Using
    Return True
    Catch ex As Exception
    '例外時処理を行っています。
    Throw
    End Try
    End Function

    ----------
    この記事は クリエイティブ・コモンズ 表示 - 継承 4.0 国際 ライセンスの下に提供されています。
    https://creativecommons.org/licenses/by-sa/4.0/
引用返信 削除キー/
■33622 / inTopicNo.2)  Re[1]: CSV出力時に対象データバイト数+crlfの2バイト分のNull文字が出力される
□投稿者/ Hongliang 大御所(535回)-(2017/05/11(Thu) 17:35:06)
  • アイコンこれだけだと何とも言えないですね。
    一番可能性が高いのは、そもそもlinesに\0が敷き詰められていた、ではないでしょうか。
    .NETのString型は\0を含むことができるので、例えば0で埋められた16バイトのbyte配列をEncoding.Default.GetString(bytes)した場合、\0が16個並んだStringになります。
引用返信 削除キー/
■33623 / inTopicNo.3)  Re[2]: CSV出力時に対象データバイト数+crlfの2バイト分のNull文字が出力される
□投稿者/ tom 一般人(2回)-(2017/05/17(Wed) 10:36:21)
  • アイコンHongliangさん

    回答ありがとうございます。
    返事遅くなり申し訳ございません。

    writeLineを使用していたのに、改行コードも\0で出力されたのが今回の現象で
    理解できないところとなります。
    writeLineの内部動作を把握できていないのですが、データ部が\0であっても
    改行は出力されると考えているためです。

    時間ができたときにデータ部\0のデータで検証してみたいと思います。




引用返信 削除キー/
■33624 / inTopicNo.4)  Re[3]: CSV出力時に対象データバイト数+crlfの2バイト分のNull文字が出力される
□投稿者/ tom 一般人(4回)-(2017/05/18(Thu) 17:13:31)
  • アイコン> 時間ができたときにデータ部\0のデータで検証してみたいと思います。

    writeLineに渡すデータ部を以下のソースにてNULL文字を11バイト分指定しましたが、
    改行コードはNULL文字とならず、改行として出力したため、再現しませんでした。
    報告として投稿いたします。

    lines.Add(vbNullChar & vbNullChar & vbNullChar & vbNullChar & vbNullChar & vbNullChar & vbNullChar & vbNullChar & vbNullChar& vbNullChar& vbNullChar)
    WriterLines(lines.ToArray)

    ※WriterLinesはNo33621参照
引用返信 削除キー/
■33625 / inTopicNo.5)  Re[4]: CSV出力時に対象データバイト数+crlfの2バイト分のNull文字が出力される
□投稿者/ hihijiji 一般人(1回)-(2017/05/20(Sat) 11:00:26)
  • アイコンOS、フレームワークを含めて、ソフトウェアの問題である可能性は極めて低いです。

    ありそうなのは、

    1.リムーバブルストレージに書き込んで、アンマウントせずに外した。
    2.フラッシュメモリの寿命またはコントローラの不具合。
    3.その他、外的要因によるトラブル。

    などです。
引用返信 削除キー/



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

このトピックに書きこむ

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

Mode/  Pass/


- Child Tree -