[打开文件对话框-保存文件对话框错误]该进程无法访问这些文件,因为它正由另一个进程使用

本文关键字:进程 对话框 文件 因为 另一个 保存文件 错误 访问 | 更新日期: 2023-09-27 18:32:04

当我输入要保存的文件的名称时,它给了我一个错误:进程无法访问文件(目录+文件输出的名称),因为它正被另一个进程使用。为什么?我该如何解决?

private void button_Click_C_Open(object sender, EventArgs e)
{
    Stream myStream = null;
    OpenFileDialog openFileDialog1 = new OpenFileDialog();
    //openFileDialog1.InitialDirectory = "c:''";
    openFileDialog1.Filter = "txt files (*.txt)|*.txt|All files (*.*)|*.*";
    openFileDialog1.FilterIndex = 2;
    openFileDialog1.RestoreDirectory = true;
    if (openFileDialog1.ShowDialog() == DialogResult.OK)
    {
        try
        {
            if ((myStream = openFileDialog1.OpenFile()) != null)
            {
                using (myStream)
                {
                    filein = openFileDialog1.FileName; //file in lo scegliamo dal openfiledialog
                    textFileScelto.Text = filein; //visualizza la scelta in una textbox
                }
            }
        }
        catch (Exception ex)
        {
            MessageBox.Show("Error: Could not read file from disk. Original error: " + ex.Message);
        }
    }
}
private void Encypt_File_Click(object sender, EventArgs e)
{
    try
    {
        Stream my1Stream;
        SaveFileDialog saveFileDialog1 = new SaveFileDialog();
        saveFileDialog1.Filter = "txt files (*.txt)|*.txt|All files (*.*)|*.*";
        saveFileDialog1.FilterIndex = 2;
        saveFileDialog1.RestoreDirectory = true;
        if (saveFileDialog1.ShowDialog() == DialogResult.OK)
        {
            if ((my1Stream = saveFileDialog1.OpenFile()) != null)
            {
                fileout = saveFileDialog1.FileName;
                passwordBytes = GetPasswordBytes();
                AES.EncryptFile(filein, fileout, passwordBytes);
                MessageBox.Show("File Criptato!");
                my1Stream.Close();
            }
        }
    }
    catch (Exception ex)
    {
        MessageBox.Show(ex.Message);
    }
}

对于任何语法错误,我深表歉意。我希望我能很好地理解你的答案。提前谢谢。

[打开文件对话框-保存文件对话框错误]该进程无法访问这些文件,因为它正由另一个进程使用

由于 OpenFile() 方法,您自己的应用程序对文件持有锁。尝试将my1Stream.Close();放在AES.EncryptFile(filein, fileout, passwordBytes);之前。

实际上没有必要使用流。

这应该可以解决问题

if (saveFileDialog1.ShowDialog() == DialogResult.OK)
    {            
        fileout = saveFileDialog1.FileName;
        passwordBytes = GetPasswordBytes();
        AES.EncryptFile(filein, fileout, passwordBytes);
        MessageBox.Show("File Criptato!");
    }

对此没有简单的解决方案。您需要找出哪个进程打开了过滤器,然后停止该进程或获取退出它的订单。

但最重要的是,您需要处理代码中的异常。

确定哪个进程以编程方式使用筛选器是一项不平凡的任务。