Запись файла с разделителями табуляцией

У меня проблемы с написанием файла с разделителями табуляцией, я проверил здесь и еще не получил своих ответов.

Итак, у меня есть функция, которая возвращает строку с важными частями ниже (используемый разделитель и способ построения каждой строки):

var delimiter = @"\t";
sb.Append(string.Join(delimiter, itemContent));
sb.Append(Environment.NewLine);

Возвращаемая строка выглядит так:

H\t13\t170000000000001\t20150630
D\t1050\t10.0000\tY
D\t1050\t5.0000\tN

И затем я записываю его в файл с этим (содержимое ниже - строка выше):

var content = BuildFile(item);
var filePath = tempDirectory + fileName;

// Create the File
using (FileStream fs = File.Create(filePath))
{
    Byte[] info = new UTF8Encoding(true).GetBytes(content);
    fs.Write(info, 0, info.Length);
}

Однако вывод файла без вкладок (открыт в блокноте ++):

H\t13\t170000000000005\t20150630
D\t1050\t20.0000\tN
D\t1050\t2.5000\tY

Когда это должно быть больше (пример файла прилагается):

H   100115980   300010000000003 20150625
D   430181  1   N
D   342130  2   N
D   459961  1   N

Может ли это быть вызвано используемой мной кодировкой? Цените любой вклад, который вы можете внести, спасибо!


person AnimaSola    schedule 03.07.2015    source источник
comment
@OgnyanDimitrov не совсем, это по сути вопрос о строках и синтаксисе C #   -  person Panagiotis Kanavos    schedule 03.07.2015
comment
Вы также можете использовать ControlChars.Tab ( sb.Append(string.Join(ControlChars.Tab, itemContent));), если вы согласны добавить ссылку на Microsoft.VisualBasic   -  person Sébastien Sevrin    schedule 03.07.2015
comment
используйте 1_   -  person DrKoch    schedule 03.07.2015


Ответы (2)


Используя var delimiter = @"\t";, переменная содержит литерал \ плюс t. Синтаксис @ отключает обратную косую черту как «особую». В этом случае вы действительно хотите

var delimiter = "\t";

иметь символ табуляции.

person Hans Kesting    schedule 03.07.2015

В вашем коде есть опечатка. Префикс @ означает, что следующая строка является литералом, поэтому @ "\ t" представляет собой двухсимвольную строку с символами \ и t.

Вы должны использовать "\ t" без префикса.

Вам следует подумать об использовании StreamWriter вместо создания всей строки в памяти и записывать необработанные байты. StreamWriter по умолчанию использует UTF-8 и позволяет писать отформатированные строки так же, как и с Console.WriteLine:

var delimiter ="\t";

using(var writer=new StreamWriter(filePath))
{
    var line=string.Join(delimiter, itemContent);
    writer.WriteLine(line);
}
person Panagiotis Kanavos    schedule 03.07.2015