0

我有以下代码:

private void encryptFileButton_Click(object sender, EventArgs e)
        {
            try
            {
                bool asciiArmor = false;
                bool withIntegrityCheck = false;
                pgp.EncryptFile(@attachmentTextBox.Text,
                         @"C:\TCkeyPublic.txt",
                         @"C:\OUTPUT.pgp",
                         asciiArmor,
                         withIntegrityCheck);
                MessageBox.Show("File Encrypted Successfully!");
            }
            catch
            {
                MessageBox.Show("File Encryption Fail!");
            }            
        }

我想@"C:\TCkeyPublic.txt"变成类似的东西new FileInfo(openFileDialog1.FileName)。因此,当用户具有不同的文件名或文件路径时,他们不必总是更改代码。

但是当我尝试这样做时,代码下方有一条红色的 zizag 线,当我将鼠标放在上面时,它说它无法将 System.IO.FileInfo 转换为 System.IO.Stream。

                        try
                        {
                            bool asciiArmor = false;
                            bool withIntegrityCheck = false;
                            pgp.EncryptFile(@attachmentTextBox.Text,
                                     new FileInfo(openFileDialog1.FileName),
                                     @"C:\OUTPUT.pgp",
                                     asciiArmor,
                                     withIntegrityCheck);
                            MessageBox.Show("File Encrypted Successfully!");
                        }
                        catch
                        {
                            MessageBox.Show("File Encryption Fail!");
                        } 

我正在使用 didisoft pgp(BouncyCastle.CryptoExt.dll 和 DidiSoft.Pgp.dll)来构建我的项目,以使用 PGP 使用 PGP 公钥加密文件并使用密码和私钥对其进行解密。

好心劝告!!!谢谢!

4

2 回答 2

0

你可以尝试这样的事情:

using System.IO;
...
using (var inputStream = new FileStream(openFileDialog1.FileName, FileMode.Open, FileAccess.Read, FileShare.ReadWrite))
using (var outputStream = new FileStream(@"C:\OUTPUT.pgp", FileMode.OpenOrCreate))
{
   pgp.EncryptFile(@attachmentTextBox.Text, inputStream, outputStream, ..
}

没有您的didisoft,因此无法自己验证这一点..

于 2013-10-30T09:20:30.393 回答
0

文件锁定是因为来自 DidiSoft API 的 EncryptFile 方法也尝试从同一文件获取流。可能下面的示例片段是您打算做的:

bool asciiArmor = false;
bool withIntegrityCheck = false;
if (openFileDialog1.ShowDialog() == DialogResult.OK) 
{
  pgp.EncryptFile(@attachmentTextBox.Text,
                  openFileDialog1.FileName,
                  @"C:\OUTPUT.pgp",
                  asciiArmor,
                  withIntegrityCheck);
}

如果您更喜欢使用流,您可以检查 EncryptStream 方法,如 http://www.didisoft.com/net-openpgp/examples/encrypt-file/#EncryptStream所示

顺便说一句,欢迎您直接通过 support@didisoft.com 与我们联系

于 2013-11-16T20:14:05.893 回答