Почему открытые файлы остаются открытыми, если я не утилизирую их? - PullRequest
0 голосов
/ 16 апреля 2011

В моем приложении я использую OpenFileDialog, а затем назначаю загруженный файл полю LoadedFile.Я обнаружил, что если я открываю 3 файла, все остаются открытыми (доступ запрещен при попытке что-либо с ними сделать), и я не уверен, почему?Однако при этом все работает нормально:

if(LoadedFile!=null)
{
  LoadedFile.Dispose();
  LoadedFile=null;
}

LoadedFile=openFileDialog.GetFile() //pseudo code

Достаточно ли этого?Почему все файлы остаются «открытыми», если я этого не делаю?

Ответы [ 3 ]

3 голосов
/ 16 апреля 2011

Если вы явно не закрываете открытый файл, он остается открытым, и вы получаете исключение нарушения прав доступа.

Вы должны открыть файл в операторе using, чтобы убедиться, что он уничтоженправильно (это то, что делает ваш код, вручную).

using(File aFile = File.Open("path to file"))
{
 // use the file
}

Примечание:

Это не имеет ничего делать с памятью (который вы надеваетене контролируй себя, так как .NET - это сборщик мусора).Речь идет об управлении ресурсами, в данном случае дескрипторы открытых файлов.

1 голос
/ 16 апреля 2011

Пока вы не позвоните Dispose() (то есть, заявив, что он вам больше не нужен), файл будет заблокирован.

0 голосов
/ 16 апреля 2011

Вы должны закрыть файл, как только закончите с ним.Dispose делает это.

...