将许多变量写入文本文件

时间:2017-07-26 09:35:53

标签: c# .net streamwriter

我有这段代码:

using (StreamWriter writer = new StreamWriter("C:\\Users\\HP8200\\Desktop\\teste.txt"))
{            
    string numcont = _transaction.PartyFederalTaxID;

    double numenc = _transaction.BillToPartyID;
    double numfatura = _transaction.BillToPartyID;
    string zona = _transaction.BillToPartyCountryID;
    DateTime data = _transaction.CreateDate;
    string ean = _transaction.ATDocCodeId;
    double iva = _transaction.TotalTaxAmount;
    double precoantesdisc = _transaction.TotalLineItemDiscountAmount;
    double preconet = _transaction.TotalNetAmount;

    writer.WriteLine(numcont,";", numenc,";", numfatura,";", data,";", zona, Environment.NewLine , 
        ean,";", iva,";", precoantesdisc,";", preconet);
}

MessageBox.Show("gravou");

它应该将所有这些变量保存到我说的文本文件中,但它只写第一个变量(numcont)。我需要做什么,它在文本文件中写下我需要的所有变量? 随意请求更多代码。

5 个答案:

答案 0 :(得分:6)

您需要格式化字符串:

writer.WriteLine(string.Format("{0};{1};{2};{3};{4}{5}{6};{7};{8};{9}",numcont, numenc, numfatura, data.ToString(), zona, Environment.NewLine, ean, iva, precoantesdisc, preconet));

如果您可以使用C#6语法:

writer.WriteLine($"{numcont};{numenc};{numfatura};{data.ToString()};{zona}{Environment.NewLine}{ean};{iva};{precoantesdisc};{preconet}");

修改

仅使用日,月和年:

writer.WriteLine($"{numcont};{numenc};{numfatura};{data.ToString("yyyyMMdd")};{zona}{Environment.NewLine}{ean};{iva};{precoantesdisc};{preconet}");

模式" yyyMMdd"可以按你的要求安排。例如" dd.MM.yyyy"

答案 1 :(得分:5)

只需执行以下操作

您必须连接变量中的所有变量,然后将其作为参数传递

var line = numcont +";"+ numenc+";"+ numfatura+";"+ data+";"+ zona +Environment.NewLine + ean+";"+ iva+";"+ precoantesdisc+";"+ preconet; 



writer.WriteLine(line);

或出于可读原因

var  line =string.Format("{0};{1};{2};{3};{4}\n{5};{6};{7};{8}",numcont, numenc, numfatura, data.ToString(), zona, ean, iva, precoantesdisc, preconet);

答案 2 :(得分:1)

使用File.WriteAllText()将简化您的代码,尝试在线运行this example

public static void Main()
{
    string numcont = "abc";

    double numenc = 1.1;
    double numfatura = 12.2;
    string zona = "def";
    DateTime data = new DateTime();
    string ean = "hij";
    double iva = 23.4;
    double precoantesdisc = 34.5;
    double preconet = 45.6;
    var info =  numcont + ";" + numenc + ";" + numfatura + ";" + data + ";"
                + zona + Environment.NewLine + ean +";" + iva + ";" + 
                precoantesdisc +";" + preconet;
    File.WriteAllText("abc.txt",info);

    Console.Write(info);
}

答案 3 :(得分:1)

如果查看方法StreamWriter.WriteLine,您将看到没有任何重载符合您提供给方法的参数模式。

到目前为止,您使用以下签名呼叫this overload

  

public virtual void WriteLine(<br> string format,<br> params object[] arg<br> )

文档说明了参数arg

  

包含零个或多个要格式化和写入的对象的对象数组....   format参数由零个或多个文本运行组成,其中包含零个或多个索引占位符(称为格式项),这些占位符对应于此方法的参数列表中的对象。格式化过程使用相应对象的值的字符串表示替换每个格式项。

这似乎不是你想要的。

一种常用的显示对象的方法是覆盖ToString方法。

public override string ToString()
{
    return $"{PartyFederalTaxID};{BillToPartyID};{CreateDate};{BillToPartyCountryID}" + Environment.NewLine + 
    $"{ATDocCodeId};{TotalTaxAmount}{TotalLineItemDiscountAmount}{TotalNetAmount}"
}

这将允许您确定格式,您可以简单地将整个对象作为参数转储到WriteLine方法中。将自动调用ToString方法:

writer.WriteLine(_transaction);

答案 4 :(得分:0)

您还可以使用string.Concat(),因为它会将所有值连接到字符串

writer.WriteLine(string.Concat(numcont,";", numenc,";", numfatura,";", data,";", zona, Environment.NewLine , 
    ean,";", iva,";", precoantesdisc,";", preconet));

StreamWriter.WriteLine(string format, params object[] arg) 

重载方法如下

writer.WriteLine("{0};{1};{2};{3};{4};{5};{6}:{7};{8};{9}", numcont, numenc, numfatura, data, zona, Environment.NewLine,
                ean, iva, precoantesdisc, preconet);