C# [OpenFileDialog saveFileDialog错误]进程无法访问这些文件,因为其他进程正在使用这些文件。

C# [OpenFileDialog saveFileDialog错误]进程无法访问这些文件,因为其他进程正在使用这些文件。,c#,winforms,visual-studio,visual-studio-2015,C#,Winforms,Visual Studio,Visual Studio 2015,当我输入要保存的文件名时,它会给我一个错误:进程无法访问文件(目录+文件名),因为另一个进程正在使用它。为什么?我怎样才能解决这个问题 private void button_Click_C_Open(object sender, EventArgs e) { Stream myStream = null; OpenFileDialog openFileDialog1 = new OpenFileDialog(); //openFileDialog1.InitialDi

当我输入要保存的文件名时,它会给我一个错误:进程无法访问文件(目录+文件名),因为另一个进程正在使用它。为什么?我怎样才能解决这个问题

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()
before
AES.EncryptFile(filein、fileout、passwordBytes)

实际上不需要使用流

这应该能奏效

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

Stream
OpenFileDialog
SaveFileDialog
都实现了
IDisposable
,因此强烈建议使用
语句将它们包装在
中。中可用的粘贴解决方案应该是注释,因为代码中存在非常特殊的问题(请参阅答案)。True Alexei,你注意到的时候我正在编辑我的答案。成功了!非常感谢:)