Я немного обыскал, но не смог найти то, что решило мою проблему.
У меня есть некоторый код, который FileStream varbinary из моей базы данных, и преобразовать его в файл на клиентском компьютере, который может быть просмотрен в приложении по умолчанию для типа файла при двойном щелчке, и загружен на клиентский ПК, когда нажата загрузка btn.
Проблема в том, что когда пользователь дважды щелкает элемент в ListView (например, mydocument.docx), мой код дает ему временное имя и сохраняет его во временном каталоге на клиентском компьютере. Но этот файл больше не удаляется ?! Как я могу получить только что созданный временный файл для автоматического удаления, в следующих случаях:
1. Пользователь закрывает соответствующее приложение (например, Word for .docx), которое впоследствии снова удалит временный файл.
2. Пользователь закроет окно Winform, которое удалит временный файл.
3. Все временные файлы, созданные программой, будут удалены при следующей перезагрузке.
Я предпочитаю случай 1, но не уверен, что это возможно.
Исходный код выглядит следующим образом:
public void WriteFile(string filePath, StoredFile file, bool tempLocation)
{
byte[] data = file.FilContent.ToArray();
FileStream fileStream;
string tempName = Path.GetRandomFileName(), strPath;
if (tempLocation)
strPath = String.Format(@"{0}{1}{2}", Path.GetTempPath(), tempName, file.FilExt);
else
strPath = String.Format(@"{0}{1}", filePath, file.FilExt);
fileStream = new FileStream(strPath, FileMode.OpenOrCreate, FileAccess.ReadWrite, FileShare.None, 512, FileOptions.DeleteOnClose);
try
{
fileStream.Write(data, 0, data.Length);
fileStream.Flush();
if (tempLocation)
System.Diagnostics.Process.Start(@strPath);
}
finally
{
fileStream.Close();
}
}
Я много пробовал ... Я также пытался использовать метод Process.WaitForExit (), но когда я его использую, мое приложение PDF выдает мне следующее сообщение об ошибке:
Произошла ошибка при открытии этого документа. Этот файл уже открыт или используется другим приложением.
FileOptions.DeleteOnClose не работал специально ... Я хочу, чтобы временный файл был удален, когда приложение Process было закрыто.