将值从字典对象写入文本文件只写入最后一个键值对

宝石艺术

我完全不懂 C# 或任何编程,但我想学习。过去几天我一直在网上搜索,将应该从 2 个文本文件中读取的内容放在一起并输出一个文件(格式为 json 文件,我只需将其复制/粘贴到该文件中)。所以我可以从两个文件中读取,创建一个字典对象并写入一个文件,但它只写入最后一个项目。我相信我会一遍又一遍地覆盖直到最后一部分。如何附加到文件而不是覆盖?

我的代码:

using System.IO;
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;

namespace WriteLangFile
{
    class Program
    {
        static void Main(string[] args)
        {
            try
            {
                string path1 = @"C:\temp\langVars.txt";
                string path2 = @"C:\temp\langValues.txt";

                string[] readVars = File.ReadAllLines(path1);
                string[] readVals = File.ReadAllLines(path2);

                Dictionary<string, string> dictionaryVars = new Dictionary<string, string>();
                for (int i = 0; i < readVars.Length; i++)
                {
                    dictionaryVars.Add(readVars[i], readVals[i]);
                }

                string outputPath = ("C:\\temp\\");
                string outputFileName = ("lang.txt");
                string constant, value;

                foreach (KeyValuePair<string, string> kvp in dictionaryVars)
                {
                    constant = (kvp.Key);
                    value = (kvp.Value);
                    string[] lines = { ("\"LANG_\"" + constant + "\"_LANG \"" + " : { "),
                                       ("\"translations\" : {"),
                                       ("\"Lang.asp\" : {"),
                                       ("\"eng\"" + ": \"" + value + "\""),
                                       ("}"),
                                       ("}"),
                                       ("},")
                    };

                    using (StreamWriter outFile = new StreamWriter(Path.Combine(outputPath, outputFileName)))
                    {
                        foreach (var item in lines)
                        {
                            outFile.WriteLine(item.ToString());
                        }

                    }

                }
            }
            catch (Exception e)
            {
                Console.WriteLine("Exception: " + e.Message);
            }
            finally
            {
                Console.WriteLine("Executing finally block.");
            }
        }
    }
}
骆驼

您的问题是您在循环中打开/关闭文件,并且您没有使用带有option构造函数StreamWriterappend

最好的解决方案可能是将StreamWriter创建移到循环之外,以便您只打开文件一次:

using (StreamWriter outFile = new StreamWriter(Path.Combine(outputPath, outputFileName)))
{
    foreach (KeyValuePair<string, string> kvp in dictionaryVars)
    {
        constant = (kvp.Key);
        value = (kvp.Value);
        string[] lines = { ("\"LANG_\"" + constant + "\"_LANG \"" + " : { "),
                           ("\"translations\" : {"),
                           ("\"Lang.asp\" : {"),
                           ("\"eng\"" + ": \"" + value + "\""),
                           ("}"),
                           ("}"),
                           ("},")
        };

        foreach (var item in lines)
        {
            outFile.WriteLine(item.ToString());
        }
    }
}

为了完整起见,如果您要将StreamWriter创建保留在循环中,您可以像这样构造它,以便它附加而不是覆盖文件:

using (StreamWriter outFile = new StreamWriter(Path.Combine(outputPath, outputFileName), append: true))

PS 看起来您可能正在尝试生成一个包含 JSON 的文件。目前您的代码未生成有效的 JSON。如果您想生成 JSON,您应该使用诸如 JSON.NET 之类的序列化程序,而不是手动构建 JSON(即以容易出错的方式)。

本文收集自互联网,转载请注明来源。

如有侵权,请联系 [email protected] 删除。

编辑于
0

我来说两句

0 条评论
登录 后参与评论

相关文章

当写入文本文件(附加)时,我写入的最后一个值将替换所有先前的值

仅将字典值写入文本文件

将字典列表值写入文本文件

c#从多个线程将文本写入一个文本文件

如何使用python将字典键值写入文本文件

设计一个装饰器在文本文件中写入函数返回值

阅读字典并写入文本文件

TypeError:预期的字符缓冲区对象(将字典键写入文本文件时)

从文本文件读入对象的向量,在类中写入另一个txt文件

从文本文件读取并尝试使用printWriter写入另一个文件将导致空白文件

从一个文本文件读取并写入两个文本文件

如何将多个列表写入一个文本文件,其中每个列表都写入一个新行?

如何将点对象写入文本文件

将日志写入对象Java的文本文件

对文本文件中的名称进行排序,然后将结果写入另一个文本文件

从文本文件中读取特定列的数据并写入另一个文本文件tcl

如何从文本文件排序并写入另一个文本文件Java

在文本文件中读取多行,然后在另一个文本文件中写入

如何创建一个包含文本文件中的键值对的字典

Vbs创建一个文本文件,并在其中写入文本

将帖子值写入文本文件

将整数和浮点值写入文本文件

puts() 只打印文本文件的最后一个元素

从文本文件复制并将行编号写入另一个文件

Python:读取CSV文件并写入另一个文本文件

将值写入文本文件,而不是对象名称

使用Java格式化文本文件内容后,如何读取文本文件内容并写入另一个文本文件?

Python - BeautifulSoup - 抓取的内容仅写入第一个文本文件,而不写入后续文件

将句子写入文本文件