使用新保存的图像加密图像时出错

时间:2013-04-10 04:34:23

标签: c# image-processing encryption

首先我使用image.save创建图像,这是一个片段代码:

    private void Save(Bitmap image)
    {
        string fullPath = string.Empty;
        string encryptPath = string.Empty;
        bool isSaved = false;

        try
        {
            // my code                

            image.Save(fullPath, jgpEncoder, myEncoderParameters); // save and image created

            isSaved = true;

            Log.WriteLine("PictureCapturer", "<< Save", LogLevel.Information, 0);
        }
        catch (Exception ex)
        {
            Log.WriteLine("PictureCapturer", "Error when Save : " + ex, LogLevel.Error, 0);
        }
        finally
        {
            image.Dispose();
        }

        if (Properties.EncryptPicture && isSaved)
        {
            Crypto.EncryptFile(fullPath, encryptPath); // start encrypt file
        }
    }

使用Rijndael的文件加密器的代码段:

    public void EncryptFile(string inputFile, string outputFile)
    {
        try
        {
            string password = @"xxxxxxx";
            UnicodeEncoding UE = new UnicodeEncoding();
            byte[] key = UE.GetBytes(password);

            string cryptFile = outputFile;
            FileStream fsCrypt = new FileStream(cryptFile, FileMode.Create);

            RijndaelManaged RMCrypto = new RijndaelManaged();

            CryptoStream cs = new CryptoStream(fsCrypt,
                RMCrypto.CreateEncryptor(key, key),
                CryptoStreamMode.Write);

            FileStream fsIn = new FileStream(inputFile, FileMode.Open); // ERROR HERE

            int data;
            while ((data = fsIn.ReadByte()) != -1)
                cs.WriteByte((byte)data);

            fsIn.Close();
            cs.Close();
            fsCrypt.Close();
        }
        catch(Exception ex)
        {
            string e = ex.Message;
        }
    } 

但加密图片时出错:

消息=“进程无法访问文件'D:\ Foto \ xxxxx.Jpeg',因为它正由另一个进程使用。”

fyi我想在运行时创建图像并加密图像。

感谢帮助

1 个答案:

答案 0 :(得分:1)

消息:

“进程无法访问文件'D:\ Foto \ xxxxx.Jpeg',因为它正由另一个进程使用。”

表示程序打开文件而不是Close。两件事:

1)确保没有其他程序打开文件(例如,如果您在资源管理器或图像查看器中打开它) 2)确保程序的当前或以前的迭代没有打开文件,并且永远不会关闭它。例如,如果抛出异常,您的程序不会Close该文件。我建议使用finally块来清理资源,例如调用CloseDispose,因为finally块总是在所有代码结束后执行,抛出异常抓住了,无论如何。