我完全不懂 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的构造函数StreamWriter
append
。
最好的解决方案可能是将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] 删除。
我来说两句