我正在创建一个小型宠物加密项目,我正在从文本文件中读取文本,在每行都在一个数组中进行修改,然后将其提交回文本文件。问题是将字符串添加回文件,因为文本文件的当前文本只是从程序现在的方式被删除。更具体地说,我想将数组中的所有字符串都放入一个字符串中,这就是我认为错误的地方。这是我写的代码。
static void Main(string[] args)
{
string[] getAllText = File.ReadAllLines("H:\\BetaText.txt");
File.WriteAllText("H:\\BetaText.txt", string.Concat(Lock(getAllText)));
System.Diagnostics.Process.Start("H:\\BetaText.txt");
}
Lock只是我程序中的一个方法,它返回一个加密的字符串数组。确认文本文件已正确解析,修改返回确实返回了我想要的数组。问题仍然是我的string.Concat()语句。我知道如何使用多行语句解决这个问题,但我想避免这种情况,并了解为什么Concat()语句不像我认为的那样工作。我还使用了string #Join方法和#34;"分隔符。通过StackOverflow看我没有看到这个答案,根据MSDN文档我不相信我应该有这个问题。谢谢。
答案 0 :(得分:2)
您可以使用String.Join将字符串数组连接成一个字符串。
String.Join ("", getAllText);
您也可以使用Aggregate
getAllText.Aggregate((c, n) => string.Format("{0}{1}", c, n);
使用聚合可以构建更复杂的示例。例如,您可以使用逗号
分隔它们getAllText.Aggregate((c, n) => string.Format("{0}, {1}", c, n));
答案 1 :(得分:1)
或简单地加入','。如果您愿意,请选择其他分隔符
var writeText = string.Join(", ", Lock(getAllText).Select(v => v.ToString()));
File.WriteAllText("H:\\BetaText.txt", writeText);
答案 2 :(得分:1)
所以你正在做的是逐行读取文件到string[]
然后加密每一行,然后将这些行提交回文件。
就个人而言,我认为你的方法是错误的(直觉,但这就是为什么)
File.ReadAllLines
通过使用换行符(Environment.NewLine
,"\r\n"
,"\n"
...)拆分文件来创建数组 - 如果您的加密算法恰好加密会发生什么某个特定字节作为换行符? - 突然你的换行符不同 - 因此反过来会基本上失败(我认为,因为解密文件"可能"正在使用不同的换行符)
更好的解决方案是:
byte[] unencryptedBytes = Encoding.UTF8.GetBytes(File.ReadAllText(filename));
byte[] encryptedBytes = Lock(unencryptedBytes);
File.WriteAllText(filename, Encoding.UTF8.GetString(encryptedBytes));
我知道这在技术上并不是你所要求的(抱歉) - 我只是觉得你正在做的事情可能不起作用。