У меня есть небольшая электронная почта, которая выполняет шифрование. Ниже приводится только краткое изложение программы:C# File.Delete - Файл используется другим процессом
private void sendEmailButton_Click(object sender, EventArgs e)
{
else
{
//////////////////////////////////////////////////////////////////////////
if (encryptEverythingCheckBox.Checked)
{
encryptAll();
}
//////////////////////////////////////////////////////////////////////////
// Email credentials network codes blahblah
// Assign the sender's email address to MailAddress function
MailAddress mailAddress = new MailAddress(username);
// Tells the recipent the sender's email
mailMessage.From = mailAddress;
// Username & Password of your email address
System.Net.NetworkCredential networkCredential;
networkCredential = new System.Net.NetworkCredential(username, password);
// Enable SSL to encypt the connection
smtpClient.EnableSsl = true;
// Disable the use of default credentials
smtpClient.UseDefaultCredentials = false;
// Specify your own credential
smtpClient.Credentials = networkCredential;
//port number and send email blahblahblah
deleteEncryptedFile();
}
}
Так что проблема у меня сейчас в отношении метода пустот deleteEncryptedFile() и encryptAll(). Ниже приведены коды:
public void deleteEncryptedFile()
{
if (File.Exists(@"C:\EncryptedFile.pgp"))
File.Delete(@"C:\EncryptedFile.pgp");
}
public void encryptAll()
{
OpenFileDialog openFileDialog1 = new OpenFileDialog();
openFileDialog1.InitialDirectory = "c:\\";
openFileDialog1.RestoreDirectory = true;
openFileDialog1.Title = "CHOOSE RECIPENT'S PUBLIC KEY";
if (openFileDialog1.ShowDialog() == DialogResult.OK)
{
invisibleTextBox.Text = openFileDialog1.FileName.ToString();
string encryptedbodymessage = pgp.EncryptString(messageRichTextBox.Text, new FileInfo(@invisibleTextBox.Text));
messageRichTextBox.Text = "";
messageRichTextBox.Text = encryptedbodymessage;
if (attachmentTextBox.Text != "")
{
bool asciiArmor = false;
bool withIntegrityCheck = false;
pgp.EncryptFile(@attachmentTextBox.Text, @invisibleTextBox.Text, @"C:\EncryptedFile.pgp", asciiArmor, withIntegrityCheck);
invisibleTextBox.Text = "";
mailAttachment = new Attachment(@"C:\EncryptedFile.pgp");
}
}
}
Так когда кнопка посыла щелкнул и файлы зашифрованы и отправлены, я хочу, чтобы удалить его с компьютера. Поэтому я запустил метод deleteEncryptedFile
, чтобы удалить EncryptedFile.pgp с моего компьютера. Но я продолжал получать это сообщение, которое говорит:
«Процесс не может получить доступ к файлу« C: \ EncryptedFile.pgp », потому что он используется другим процессом».
Но единственный «другой процесс», о котором я могу думать, - это метод шифрования (encryptAll()). Но разве это не должно было быть сделано? Пожалуйста, совет, как я могу решить эту проблему?
Возможно, вы забыли закрыть мероприятие, но не можете прочитать его из своего кода. –
Неправильная практика размещения файлов в корневой папке. – Ofiris
Моя догадка гласит, что либо 'pgp.EncryptFile', либо' new Attachment' имеет дескриптор открытого файла в вашем зашифрованном файле. – Kabbalah