OpenFileDialog()锁定文件夹

时间:2010-01-22 08:10:34

标签: c# silverlight

我在Silverlight应用程序中使用OpenFileDialog()。当我使用ShowDialog()选择文件时,它只是锁定文件,直到我关闭我的应用程序。

我无法在应用程序运行时重命名或删除文件夹(浏览器中的silverlight应用程序)

如果我尝试在任何其他文件夹中选择任何其他文件,我可以重命名上一个文件夹。它似乎正在释放手柄。

我的目标:完成上传后,我想重命名/删除文件系统中的文件夹(手动)。

我知道无法将OpenFileDialog()指向代码中的其他文件夹。有什么指针吗?

顺便说一句,这是Windows错误消息:

  

无法完成操作,因为   该文件夹在另一个程序中打开。   关闭文件夹,然后重试。

6 个答案:

答案 0 :(得分:2)

我遇到了同样的问题。以下修正了

Stream fileStream = openFileDialog1.OpenFile();
if (fileStream != null)
{
   ...
   fileStream.Close();
}

通过关闭流我的问题消失了......:P

答案 1 :(得分:1)

using(var fileStream = openFileDialog1.OpenFile())
{
   // do your stuff

}

这将关闭流并解决您的问题。

答案 2 :(得分:0)

AFAIK它的方式是Windows文件系统的工作方式 - 你可以在里面有一些打开的文件句柄时重命名文件夹。在尝试重命名之前,请确保从文件夹(File.Close()等)中释放所有资源。

答案 3 :(得分:0)

为所有持有对OpenFileDialog和任何FileInfo引用的引用的变量赋值null,或者在所有那些东西超出范围的代码中,请尝试这样: -

GC.Collect();

这是一件非常严厉的事情,我通常不会推荐它。如果它没有解决你的问题摆脱它。

答案 4 :(得分:0)

要避免此类行为,请将RestoreDirectory属性值设置为true。 在这里,您可以阅读更多内容:http://msdn.microsoft.com/en-us/library/system.windows.forms.filedialog.restoredirectory.aspx

答案 5 :(得分:0)

我知道这是一个非常老的线程,但是我遇到了同样的问题,并且在OpenFileDialog中发现了一些奇怪的行为。

问题不在于FileDialog没有被正确放置或没有释放资源。问题在于FileDialog将当前目录更改为用户选择的目录。

这不会在每种情况下发生,但我设法使用ShowHelp属性(使用.NET Framework 4.7)重现了该错误:

var before = Directory.GetCurrentDirectory(); // result: The directory the application started from

using (var fileDialog = new OpenFileDialog()
{
    ShowHelp = true
})
{
    if (fileDialog.ShowDialog() == DialogResult.OK)
    {
        // do something
    }
}

var after = Directory.GetCurrentDirectory(); // result: The directory the user opened the file from

执行此操作的可能不仅是ShowHelp属性,而且这就是我可以重现它的方式(对我来说,这肯定是个错误)。

正如Vyacheslav所写,我们可以通过将RestoreDirectory设置为true来避免这种情况。