0

私は各行をテキストファイルに書き込んでいます:

Dim objWriter As New System.IO.StreamWriter(filename)

        For Each x In tofile
             objWriter.WriteLine(x)
         Next  

objWriter.Close()

これは完全に機能しますが、唯一の問題は、終了時にテキストファイルの最後に空白行が書き込まれることです。とにかくこれを回避するのは髪ですか?

または、空白である限り最後の行を削除しない場合はどうなりますか?

ありがとう

4

3 に答える 3

3

確かにあります:

System.IO.File.WriteAllText(filename, string.Join(Environment.NewLine, tofile))

これは、ストリームを自分でいじる必要がなく、現在のコードと同じ効果があります。

また可能:

System.IO.File.WriteAllLines(filename, tofile)

tofile文字列の単純な配列であると仮定します。

何らかの理由でStreamを直接使用する必要がある場合WriteLineは、最後の反復では使用しないでください。

For i=1 To tofile.Length
    x = tofile(i)
    If i<tofile.Length Then
        objWriter.WriteLine(x)
    Else  
        objWriter.Write(x)
    End If
Next
于 2012-05-15T12:20:34.683 に答える
0

WriteLineメソッドは基本的にWriteメソッドと同じですが、パラメーターの最後に改行文字を追加します。これは、最後の行の末尾にも改行文字が追加されるため、ここで問題を引き起こしています。これに続くものはありません。

tofile配列にキャストできる場合は、For Eachループを次のように置き換えることができます

objWriter.Write(String.Join(Environment.NewLine, tofile.toArray()))

toArrayもちろん、関連するキャストと交換した後。

ただし、少なくとも私の意見では、テキストファイル形式は空白行で混乱するほど敏感であってはなりません。

于 2012-05-15T12:21:30.473 に答える
0

WriteLineは、各書き込みの後にEnvironment.NewLineを追加します。
したがって、実際には出力にもう1行追加しているわけではありません。
StreamReader.Readline()を使用してファイルを読み戻そうとしていることを証明できます。

于 2012-05-15T12:19:30.017 に答える