加密:将String数组转换为单个字符串

时间:2016-03-03 16:23:28

标签: c# arrays string

我正在创建一个小型宠物加密项目,我正在从文本文件中读取文本,在每行都在一个数组中进行修改,然后将其提交回文本文件。问题是将字符串添加回文件,因为文本文件的当前文本只是从程序现在的方式被删除。更具体地说,我想将数组中的所有字符串都放入一个字符串中,这就是我认为错误的地方。这是我写的代码。

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文档我不相信我应该有这个问题。谢谢。

3 个答案:

答案 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));

我知道这在技术上并不是你所要求的(抱歉) - 我只是觉得你正在做的事情可能不起作用。

相关问题