我正在开发加密/解密程序,我做到了。但我有一个问题,我无法找到它。问题是一次只加密一个文件而不是多个。我厌倦了选择多个文件但只加密第一个文件。我也可以加密整个文件夹。在代码中需要帮助。你能告诉我以下代码中的问题在哪里吗?
private void encryptbtn_Click(object sender, EventArgs e)
{
SaveFileDialog sfd = new SaveFileDialog();
sfd.Title = "Encrypt To: ";
sfd.Filter = "All Files(*.*)| *.*";
sfd.FileName = "_ENC" + safepath;
if(sfd.ShowDialog() == DialogResult.OK){
if(pathtxt.Text != string.Empty){
string inputFilePath = pathtxt.Text;
string outputfilePath = sfd.FileName;
string EncryptionKey = "MAKV2SPBNI99212";
using (Aes encryptor = Aes.Create())
{
Rfc2898DeriveBytes pdb = new Rfc2898DeriveBytes(EncryptionKey, new byte[] { 0x49, 0x76, 0x61, 0x6e, 0x20, 0x4d, 0x65, 0x64, 0x76, 0x65, 0x64, 0x65, 0x76 });
encryptor.Key = pdb.GetBytes(32);
encryptor.IV = pdb.GetBytes(16);
using (FileStream fsOutput = new FileStream(outputfilePath, FileMode.Create))
{
using (CryptoStream cs = new CryptoStream(fsOutput, encryptor.CreateEncryptor(), CryptoStreamMode.Write))
{
using (FileStream fsInput = new FileStream(inputFilePath, FileMode.Open))
{
int data;
while ((data = fsInput.ReadByte()) != -1)
{
cs.WriteByte((byte)data);
}
}
}
}
}
MessageBox.Show("Encryption Successful");
pathtxt.Text = string.Empty;
}
答案 0 :(得分:0)
你只得到第一个文件而不是多个文件的原因是因为SafeFileDialog
不支持多个文件(这没有多大意义,不是吗?)。
相反,您可以使用目录中的所有文件指定多个输入文件(使用FolderBrowserDialog
选择目录,并使用System.IO.Directory.GetFiles
或{{获取所有文件1}})或明确指定文件(使用System.IO.Directory.EnumerateFiles
,设置FileOpenDialog
并使用Multiselect = true
)。
然后,您可以使用FileNames
提供的各种方法自动构建输出文件名。
System.IO.Path
答案 1 :(得分:0)
我想循环浏览多个文件,然后有几种方法可以做到这一点
首先使用OpenFileDialog:注意还有其他OpenFileDialog具有simlar功能,但根据WPF,Siverlight,ASP.net,Winforms
的不同而略有不同这有一个Multiselect和FileNames属性
如果您使用这些,那么您可以
OpenFileDialog open = new OpenFileDialog()
{
Multiselect =true
};
if(open.ShowDialog()==DialogResult.OK)
{
foreach(var file in open.FileNames )
{
Encypt(file);
}
}
另一种选择是使用目录
DirectoryInfo dir = new DirectoryInfo(DirPath);
foreach(var file in dir.EnumerateFiles("Filter")
{
Encypt(file);
}
如果您使用的是winforms或任何其他类似的对话框,则可以使用pathtxt.Text
如果你想将多个文件加密到一个文件,那么我建议首先压缩它们,然后加密压缩流,因为在使用多个流时尝试将文件分离出来是非常困难的