我在Silverlight应用程序中使用OpenFileDialog()
。当我使用ShowDialog()
选择文件时,它只是锁定文件,直到我关闭我的应用程序。
我无法在应用程序运行时重命名或删除文件夹(浏览器中的silverlight应用程序)
如果我尝试在任何其他文件夹中选择任何其他文件,我可以重命名上一个文件夹。它似乎正在释放手柄。
我的目标:完成上传后,我想重命名/删除文件系统中的文件夹(手动)。
我知道无法将OpenFileDialog()
指向代码中的其他文件夹。有什么指针吗?
顺便说一句,这是Windows错误消息:
无法完成操作,因为 该文件夹在另一个程序中打开。 关闭文件夹,然后重试。
答案 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来避免这种情况。