首先我使用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我想在运行时创建图像并加密图像。
感谢帮助
答案 0 :(得分:1)
消息:
“进程无法访问文件'D:\ Foto \ xxxxx.Jpeg',因为它正由另一个进程使用。”
表示程序打开文件而不是Close
。两件事:
1)确保没有其他程序打开文件(例如,如果您在资源管理器或图像查看器中打开它)
2)确保程序的当前或以前的迭代没有打开文件,并且永远不会关闭它。例如,如果抛出异常,您的程序不会Close
该文件。我建议使用finally
块来清理资源,例如调用Close
和Dispose
,因为finally
块总是在所有代码结束后执行,抛出异常抓住了,无论如何。