把所有这些流放在一起可以吗?

本文关键字:在一起 所有这些 | 更新日期: 2023-09-27 18:15:10

我希望能够打开文件,读取字节,添加值(我的加密密钥)并将其写入新文件。所以我的问题是这种方法可以吗?

const int ENCRYPE_KEY = 12345;
static void Encrypt(string fileName)
{
    using (FileStream streamToRead = File.OpenRead(fileName))
    {
        using (BinaryReader reader = new BinaryReader(streamToRead))
        {
            using (FileStream streamToWrite = File.Create(@"D:'temp'encrypted.jpg"))
            {
                using (BinaryWriter writer = new BinaryWriter(streamToWrite))
                {
                    for (int i = 0; i < streamToRead.Length; i++)
                    {
                        byte b = reader.ReadByte();
                        writer.Write((byte)(b + ENCRYPE_KEY));
                    }
                }
            }
        }
    }
}

把所有这些流放在一起可以吗?

代替箭头反模式我建议使用Linq查询(如果文件足够小- ReadAllBytes -适合内存):

   var target = File
     .ReadAllBytes(fileName)
     .Select(b => (byte)(unchecked(b + ENCRYPE_KEY))) // do not forget to allow overflow
     .ToArray();
   File.WriteAllBytes(@"D:'temp'encrypted.jpg", target);

你可以这么做。我觉得它更干净。

        byte[] data = File.ReadAllBytes(fileName);
        using (FileStream streamToWrite = File.Create(@"D:'temp'encrypted.jpg"))
        using (BinaryWriter writer = new BinaryWriter(streamToWrite))
        {
            for (int i = 0; i < data.Length; i++)
            {
                writer.Write((byte)(data[i] + ENCRYPE_KEY));
            }
        }