Я не могу удалить файл изображения, потому что он используется другим процессом - PullRequest
0 голосов
/ 07 октября 2019

Я не могу удалить файл изображения, потому что он используется другим процессом после его создания. Проблема возникает, когда мой процесс запущен. Как я могу завершить процесс, в котором открыт файл, чтобы другие процессы могли получить к нему доступ?

Я использовал этот код для создания файла изображения:

string uploads = Path.Combine(Hosting.WebRootPath, "uploads");
string fullPath = Path.Combine(uploads, fileName);
entity.file.CopyTo(new FileStream(fullPath, FileMode.Create));FileMode.Create));

описание изображения 1

Файловый менеджер не может прочитать файл изображения, java-logo-png-300x300, пока я не перестану запускать проект в VS.

описание изображения 2

Ответы [ 3 ]

2 голосов
/ 07 октября 2019

Я немного запутался в том, что это за проблема, но, судя по всему, вы никогда не закроете FileStream. Когда вы открываете файловый поток таким образом, для файла ShareMode устанавливается значение Нет, поэтому никакой другой процесс не может прочитать / записать / удалить файл. Все, что вам действительно нужно сделать, это изменить последнюю строку с:

entity.file.CopyTo(new FileStream(fullPath, FileMode.Create));

на

//Opens the file
using (FileStream stream = new FileStream(fullPath, FileMode.Create))
{
    //Copies data from entity.file to stream
    entity.file.CopyTo(stream);
}
//File was released (disposed of) thanks to the using statement

После завершения копирования файл будет выпущен, чтобы другие процессы могли получить доступ к нему. это.

0 голосов
/ 07 октября 2019

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

0 голосов
/ 07 октября 2019

Вы не можете сделать это. Но вы можете подождать до завершения процесса, вы можете использовать FileInfo.IsFileLocked(), чтобы проверить, используется ли ваш файл.

Пример кода:

public static void Test(){
    FileInfo inf = new FileInfo("your_file");

    while (inf.IsFileLocked()) {
      Console.WriteLine("File locked, wait...");
    };
}

Важно: Не забудьте закрытьпотоки каждый раз, когда вы открываете их, так как это может привести к блокировке файлов.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...