C# 使用FileStream加密时发生FileNotFoundException

C# 使用FileStream加密时发生FileNotFoundException,c#,encryption,C#,Encryption,我正在Visual Studio Windows窗体应用程序中使用C#编写一个可以加密和解密文件的程序。我将按照此演练进行操作:通过对环境和首选项进行一些小的更改,完成所有操作 当我尝试加密文件时,当程序尝试使用filestream加密文件时,会出现“FileNotFoundException was unhandled”(FileNotFoundException was unhandled)错误。到那时为止,一切似乎都在运转 以下是EncryptFile方法的代码: private voi

我正在Visual Studio Windows窗体应用程序中使用C#编写一个可以加密和解密文件的程序。我将按照此演练进行操作:通过对环境和首选项进行一些小的更改,完成所有操作

当我尝试加密文件时,当程序尝试使用filestream加密文件时,会出现“FileNotFoundException was unhandled”(FileNotFoundException was unhandled)错误。到那时为止,一切似乎都在运转

以下是EncryptFile方法的代码:

private void加密文件(字符串填充)
{
//为数据的对称加密创建Rijndael实例。
RijndaelManaged rjndl=新的RijndaelManaged();
rjndl.KeySize=256;
rjndl.BlockSize=256;
rjndl.Mode=CipherMode.CBC;
ICryptoTransform transform=rjndl.CreateEncryptor();
//使用RSACryptServiceProvider加密Rijndael密钥。
字节[]keyEncrypted=rsa.Encrypt(rjndl.Key,false);
//创建字节数组以包含键和IV的长度值。
字节[]LenK=新字节[4];
字节[]LenIV=新字节[4];
int lKey=密钥加密的.Length;
LenK=位转换器.GetBytes(lKey);
int lIV=rjndl.IV.长度;
LenIV=位转换器.GetBytes(lIV);
//将以下内容写入加密文件(outps)的文件流:
//-钥匙的长度
//-静脉注射的长度
//-加密密钥
//-第四
//-加密的密码内容
//将文件扩展名更改为“.enc”
字符串输出文件=EncrFolder+infle.Substring(0,infle.LastIndexOf(“.”)+“.enc”;
使用(filestreamoutps=newfilestream(outFile,FileMode.Create))
{
输出写入(LenK,0,4);
输出写入(LenIV,0,4);
outps.Write(密钥加密,0,lKey);
输出写入(rjndl.IV,0,lIV);
//现在,使用加密流编写密码文本进行加密。
使用(CryptoStream outStreamEncrypted=新的CryptoStream(输出、转换、CryptoStreamMode.Write))
{
//通过一次加密一个数据块,您可以节省内存并容纳大文件。
整数计数=0;
整数偏移=0;
//blockSizeBytes可以是任意大小。
int blockSizeBytes=rjndl.BlockSize/8;
字节[]数据=新字节[blockSizeBytes];
int字节读取=0;
使用(FileStream inFs=newfilestream(infle,FileMode.Open))
{
做
{
计数=信息读取(数据,0,块大小字节);
偏移量+=计数;
outStreamEncrypted.Write(数据,0,计数);
字节读取+=块大小字节;
}
而(计数>0);
inFs.Close();
}
outStreamEncrypted.FlushFinalBlock();
outStreamEncrypted.Close();
}
outps.Close();
}
}
错误发生在“using(FileStream inFs=new FileStream(infle,FileMode.Open))”行。 以下是错误的图像:


导致错误的原因和解决方法是什么?

您可能会过度考虑这一行:

string outFile = EncrFolder + inFile.Substring(0, inFile.LastIndexOf(".")) + ".enc";

()

我怀疑问题在于找不到该文件。这有什么神秘之处?另外,在报告异常时,始终发布完整的异常,包括任何内部异常。仅出于故障排除目的,捕获异常(可能在方法的顶层),然后发布
ex.ToString()
的结果。请原谅,我对所有这些都是新手。我想我的问题似乎很简单,但我对编程和这个网站都是新手,所以我对所有事情都不是很了解。当我选择要加密的文件时,为什么程序会在其他地方查找该文件?从openfiledialog中选择要使用的文件后,我如何将该文件放在预期的位置?无论是否新建,“未找到文件”都会显示正在搜索该文件的路径。去看看那条路。你找到文件了吗?不那么.NET也不会。此时
infle
的值是多少?您是否使用了调试器并设置了断点?如果没有,那么现在就做。如果您不知道如何使用调试器,请立即学习。没有理由不能设置简单的断点,也没有理由不这样做。