system.io.streamwriter Writeline

я пишу каждую строку в текстовый файл:

Dim objWriter как новый System.IO.StreamWriter (имя файла)

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

objWriter.Close ()

который работает идеально, единственная проблема заключается в том, что по завершении он записывает пустую строку в конце текстового файла, которого я не хочу. есть ли способ обойти это?

или если не удалить последнюю строку, пока она пуста?

Спасибо


person Houlahan    schedule 15.05.2012    source источник


Ответы (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
person Shadow Wizard Wearing Mask V2    schedule 15.05.2012

WriteLine добавляет Environment.NewLine после каждой записи.
Таким образом, вы на самом деле не добавляете еще одну строку к своему выводу.
Вы можете доказать, что он пытается прочитать ваш файл с помощью StreamReader.Readline ()

person Steve    schedule 15.05.2012

Метод WriteLine в основном такой же, как метод Write, но добавляет символ новой строки в конце своего параметра. Это вызывает проблему здесь, потому что он также добавит новый символ строки в конец последней строки, даже если за ним ничего нет.

Если tofile можно преобразовать в массив, вы можете заменить цикл For Each на

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

после замены toArray на соответствующий литье, конечно.

Однако, по крайней мере, на мой взгляд, формат текстового файла не должен быть настолько чувствительным, чтобы его могло испортить пустая строка.

person Harry Cutts    schedule 15.05.2012
comment
Я не верю, что \ n будет работать в VB. Вместо этого используйте Environment.NewLine. - person Steven Doggart; 15.05.2012