Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/334.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# StringBuilder文件维护格式_C#_File_Format_Stringbuilder - Fatal编程技术网

C# StringBuilder文件维护格式

C# StringBuilder文件维护格式,c#,file,format,stringbuilder,C#,File,Format,Stringbuilder,在c#中,如何将包含多行的stringbuilder导出到文件中,并对这些行进行绘制。这是我的密码: StringBuilder builder = new StringBuilder(); using (SqlCommand command = new SqlCommand(consulta, SqlConn)) { using (SqlDataReader reader = command.ExecuteReader()) { while (reader != null &a

在c#中,如何将包含多行的stringbuilder导出到文件中,并对这些行进行绘制。这是我的密码:

StringBuilder builder = new StringBuilder();
using (SqlCommand command = new SqlCommand(consulta, SqlConn))
{
  using (SqlDataReader reader = command.ExecuteReader())
  {
    while (reader != null && reader.Read())
    {
      builder.AppendFormat("{0,-5}  {1,-10}  {2,-10} {3,-18} {4,-10}  {5,-2}  {6,-10} {7,-5} {8,-10}", Convert.ToString(reader[0]), reader.GetDateTime(1).ToString("yyyy-MM-dd"), reader.GetDateTime(2).ToString("yyyy-MM-dd"), Convert.ToString(reader[3]), Convert.ToString(reader[4]), "06", Convert.ToString(reader[5]), Convert.ToString(reader[6]), Convert.ToString(reader[7]));
    }
  }
}
这里是我保存文件的地方,但它不尊重行

File.WriteAllText(saveFileDialog1.FileName, builder.ToString());

您需要使用
AppendLine
方法插入换行符:

builder.AppendFormat(...);
builder.AppendLine();
builder.AppendFormat(...);

需要换行符的地方。

需要使用
AppendLine
方法插入换行符:

builder.AppendFormat(...);
builder.AppendLine();
builder.AppendFormat(...);

需要换行的地方。

可以使用Environment.NewLine在生成器中的每行末尾添加新行

builder.AppendFormat("{0,-5}  {1,-10}  {2,-10} {3,-18} {4,-10}  {5,-2}  {6,-10} {7,-5} {8,-10}{9}", Convert.ToString(reader[0]), reader.GetDateTime(1).ToString("yyyy-MM-dd"), reader.GetDateTime(2).ToString("yyyy-MM-dd"), Convert.ToString(reader[3]), Convert.ToString(reader[4]), "06", Convert.ToString(reader[5]), Convert.ToString(reader[6]), Convert.ToString(reader[7]), Environment.NewLine);

可以使用Environment.NewLine在生成器中向每一行的末尾添加新行

builder.AppendFormat("{0,-5}  {1,-10}  {2,-10} {3,-18} {4,-10}  {5,-2}  {6,-10} {7,-5} {8,-10}{9}", Convert.ToString(reader[0]), reader.GetDateTime(1).ToString("yyyy-MM-dd"), reader.GetDateTime(2).ToString("yyyy-MM-dd"), Convert.ToString(reader[3]), Convert.ToString(reader[4]), "06", Convert.ToString(reader[5]), Convert.ToString(reader[6]), Convert.ToString(reader[7]), Environment.NewLine);

您在字符串生成器中看到的新行在哪里?试试这个:

while (reader != null && reader.Read())
{
     builder.AppendFormat("{0,-5}  {1,-10}  {2,-10} {3,-18} {4,-10}  {5,-2}  {6,-10} {7,-5} {8,-10}{9}", Convert.ToString(reader[0]), reader.GetDateTime(1).ToString("yyyy-MM-dd"), reader.GetDateTime(2).ToString("yyyy-MM-dd"), Convert.ToString(reader[3]), Convert.ToString(reader[4]), "06", Convert.ToString(reader[5]), Convert.ToString(reader[6]), Convert.ToString(reader[7]), Environment.NewLine);
}

您在字符串生成器中看到的新行在哪里?试试这个:

while (reader != null && reader.Read())
{
     builder.AppendFormat("{0,-5}  {1,-10}  {2,-10} {3,-18} {4,-10}  {5,-2}  {6,-10} {7,-5} {8,-10}{9}", Convert.ToString(reader[0]), reader.GetDateTime(1).ToString("yyyy-MM-dd"), reader.GetDateTime(2).ToString("yyyy-MM-dd"), Convert.ToString(reader[3]), Convert.ToString(reader[4]), "06", Convert.ToString(reader[5]), Convert.ToString(reader[6]), Convert.ToString(reader[7]), Environment.NewLine);
}

如果这样做效率更高、更简单,则不会避免不必要地使用
StringBuilder
以及为中间
String
分配内存的开销

我还添加了额外的
AppendLine
,用新行分隔行

using (var writer = new StreamWriter(saveFileDialog1.FileName))
{
    using (SqlCommand command = new SqlCommand(consulta, SqlConn))
    {
        using (SqlDataReader reader = command.ExecuteReader())
        {
            while (reader != null && reader.Read())
            {
                writer.AppendFormat(
"{0,-5}  {1,-10}  {2,-10} {3,-18} {4,-10}  {5,-2}  {6,-10} {7,-5} {8,-10}", 
                    Convert.ToString(reader[0]),
                    reader.GetDateTime(1).ToString("yyyy-MM-dd"),
                    reader.GetDateTime(2).ToString("yyyy-MM-dd"),
                    Convert.ToString(reader[3]),
                    Convert.ToString(reader[4]), 
                    "06",
                    Convert.ToString(reader[5]),
                    Convert.ToString(reader[6]),
                    Convert.ToString(reader[7]));
                writer.AppendLine();
           }
       }
    }
}
我还建议您可以像这样提高代码的可读性,尽管这可能是主观的

using (var writer = new StreamWriter(saveFileDialog1.FileName))
{
    using (SqlCommand command = new SqlCommand(consulta, SqlConn))
    {
        using (SqlDataReader reader = command.ExecuteReader())
        {
            while (reader != null && reader.Read())
            {
                writer.AppendFormat("{0, -7}", reader[0]);
                writer.AppendFormat("{0:yyyy-MM-dd, -12}", reader.GetDateTime(1));
                writer.AppendFormat("{0:yyyy-MM-dd, -11}", reader.GetDateTime(2));
                writer.AppendFormat("{0, -19}", reader.[3]);
                writer.AppendFormat("{0, -12}06", reader.[4]);
                writer.AppendFormat("{0, -11}, reader.[5]);
                writer.AppendFormat("{0, -6}, reader.[6]);
                writer.AppendFormat("{0, -10}, reader.[7]);
                writer.AppendLine();
           }
       }
    }
}

如果这样做效率更高、更简单,则不会避免不必要地使用
StringBuilder
以及为中间
String
分配内存的开销

我还添加了额外的
AppendLine
,用新行分隔行

using (var writer = new StreamWriter(saveFileDialog1.FileName))
{
    using (SqlCommand command = new SqlCommand(consulta, SqlConn))
    {
        using (SqlDataReader reader = command.ExecuteReader())
        {
            while (reader != null && reader.Read())
            {
                writer.AppendFormat(
"{0,-5}  {1,-10}  {2,-10} {3,-18} {4,-10}  {5,-2}  {6,-10} {7,-5} {8,-10}", 
                    Convert.ToString(reader[0]),
                    reader.GetDateTime(1).ToString("yyyy-MM-dd"),
                    reader.GetDateTime(2).ToString("yyyy-MM-dd"),
                    Convert.ToString(reader[3]),
                    Convert.ToString(reader[4]), 
                    "06",
                    Convert.ToString(reader[5]),
                    Convert.ToString(reader[6]),
                    Convert.ToString(reader[7]));
                writer.AppendLine();
           }
       }
    }
}
我还建议您可以像这样提高代码的可读性,尽管这可能是主观的

using (var writer = new StreamWriter(saveFileDialog1.FileName))
{
    using (SqlCommand command = new SqlCommand(consulta, SqlConn))
    {
        using (SqlDataReader reader = command.ExecuteReader())
        {
            while (reader != null && reader.Read())
            {
                writer.AppendFormat("{0, -7}", reader[0]);
                writer.AppendFormat("{0:yyyy-MM-dd, -12}", reader.GetDateTime(1));
                writer.AppendFormat("{0:yyyy-MM-dd, -11}", reader.GetDateTime(2));
                writer.AppendFormat("{0, -19}", reader.[3]);
                writer.AppendFormat("{0, -12}06", reader.[4]);
                writer.AppendFormat("{0, -11}, reader.[5]);
                writer.AppendFormat("{0, -6}, reader.[6]);
                writer.AppendFormat("{0, -10}, reader.[7]);
                writer.AppendLine();
           }
       }
    }
}

builder.AppendFormat不中断行?调试时,请在
writealText
之前中断。文本视图显示什么?那可能是你的问题。如果有问题,您只需在字符串格式的末尾添加一个
\n
。@thantos同意。另一个选项-make
builder.AppendLine()calli用AppendLine(string.Format(…)解析了它。我没有违反规定。对不起,为什么不直接写入
文件流
,中间
StringBuilder
有什么意义?它会无故导致内存分配成本。builder.AppendFormat不会中断行?调试时,请在
writealltext
之前中断。文本视图显示什么?那可能是你的问题。如果有问题,您只需在字符串格式的末尾添加一个
\n
。@thantos同意。另一个选项-make
builder.AppendLine()calli用AppendLine(string.Format(…)解析了它。我没有违反规定。对不起,为什么不直接写入
文件流
,中间
StringBuilder
有什么意义?它会无缘无故地产生内存分配成本。