2012-03-18 2 views
2

Я пытаюсь удалить файл из каталога в приложении asp.net, но всегда получаю исключение, что этот файл используется другим процессом, который вызван, вероятно, самим приложением ,Попытка удалить файл из каталога

это код

TableCell cell = (TableCell)PhotoGalleryGridView.Rows[e.RowIndex].Cells[1]; 
    DirectoryInfo photoGalleryDirectory = new DirectoryInfo(Server.MapPath("~/GalleryImages/")); 
    FileInfo[] imgFiles = photoGalleryDirectory.GetFiles(); 
    for (int i = 0; i < imgFiles.Length; i++) 
    { 
     if (imgFiles[i].Name == cell.Text) 
     { 
      imgFiles[i].Delete(); 
     } 
    } 

, как я должен преформ это действие? спасибо

Я реализовал это как часть использования метода OnRowDeleting из gridview, поэтому, когда я удаляю фотографию из базы данных, она также удалит фотографию из папки сайта.

protected void PhotoGalleryGridView_OnRowDeleting(object sender, GridViewDeleteEventArgs e) 
{ 

    TableCell cell = (TableCell)PhotoGalleryGridView.Rows[e.RowIndex].Cells[1]; 
    DirectoryInfo photoGalleryDirectory = new DirectoryInfo(Server.MapPath("~/GalleryImages/")); 
    FileInfo[] imgFiles = photoGalleryDirectory.GetFiles(); 
    for (int i = 0; i < imgFiles.Length; i++) 
    { 
     if (imgFiles[i].Name == cell.Text) 
     { 
      imgFiles[i].Delete(); 
     } 
    } 
} 

Я более чем готов принять любые другие идеи для этого действия.

+0

Прежде чем пытаться решить, как удалить заблокированный файл, я постараюсь узнать, почему и где файл был заблокирован! – Steve

+0

ОК, как я могу сказать, что блокирует файл? –

ответ

1

Когда вы используете объект, который инкапсулирует любой ресурс, вы должны убедиться, что, когда вы закончите с объектом, вызывается метод Dispose объекта.

Это можно сделать более легко, используя using statement в C#. Оператор using упрощает код, который вы должны писать, чтобы создать, а затем, наконец, очистить объект. Оператор using получает заданный ресурс, выполняет инструкции и, наконец, вызывает метод Dispose объекта для очистки объекта .......

+0

, какую часть моего кода мне следует использовать с помощью инструкции? –

+0

Вам нужно будет проверить все подключения, связанные с этим файлом ..... Если эти соединения не удалены, они все равно создают проблему из-за подключения .... Итак, я предпочел использовать инструкцию using в этом соединении, потому что она внедряет IDisposable интерфейс ...... Итак, проверьте все соединения, связанные с этим полем .... –

+0

хороший ответ 1+ вы должны использовать с помощью statment следующим образом: FileInfo file; использованием (FileInfo [] imgFiles = photoGalleryDirectory.GetFiles()) { для (INT I = 0; я Liran

0

Проблема заключается в том, что служба IIS, работающая на моем localHost. этот процесс называется iisexpress.exe, и он использует файл даже после закрытия сайта и пытается удалить его вручную. после того, как я вернулся, чтобы использовать развитие asp.net, проблема исчезла. спасибо всем.

Смежные вопросы