1

首先我使用 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;
        }
    } 

但是加密图像时出现错误:

Message = "该进程无法访问文件 'D:\Foto\xxxxx.Jpeg',因为它正被另一个进程使用。"

仅供参考,我想在运行时创建图像并加密图像。

感谢您的帮助

4

1 回答 1

1

消息:

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

意味着一个程序打开了文件并且从不Closed 它。两件事情:

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

于 2013-04-10T05:33:47.177 回答