Мое приложение winform периодически извлекает флэш-файл из базы данных SQL, записывает его во временную папку, отображает его в элементе управления webbroswer, а затем удаляет его из временной папки. Мое приложение создает временную папку, если она не существует. Временная папка находится в «System.Environment.CurrentDirectory».
Моя проблема в том, что разрешения для временной папки часто становятся доступными только для чтения, и тогда мое приложение не может удалить файл. Иногда проблема возникает немедленно, а иногда я могу запустить приложение несколько раз, прежде чем оно возникнет.
Как убедиться, что файл удален?
Я добавил код для удаления временной папки, а затем заново создавал ее при каждой записи в нее, но это не решило мою проблему.
Только мое приложение должно иметь доступ к этой папке, и папка содержит только эти флэш-образы.
Я думал об использовании общей папки 'temp', но где-то читал, что это может привести к проблемам.
Кроме того, у меня возникла та же проблема, когда я нашел временную папку в 'D: \'.
Я использую VS2008 на Windows XP. Приложение должно работать на XP, Vista и 7.
Вот код.
DataSet dsFlashQuizRandom = new DataSet();
dsFlashQuizRandom = objUserDAO.GetFlashQuizRandom(intAge);
if (dsFlashQuizRandom.Tables[0].Rows[0]["large_image_blob"] != null && dsFlashQuizRandom.Tables[0].Rows[0]["file_name"].ToString().Trim() != string.Empty)
{
byte[] b = (byte[])dsFlashQuizRandom.Tables[0].Rows[0]["large_image_blob"];
if (b != null)
{
string flashFileName = dsFlashQuizRandom.Tables[0].Rows[0]["file_name"].ToString().Trim();
string targetPath = System.Environment.CurrentDirectory.ToString() + @"\images\";
string strFileName = targetPath + flashFileName;
//Delete the current version of the folder (if it exists); then create a new version of it.
if (System.IO.Directory.Exists(targetPath))
System.IO.Directory.Delete(targetPath, true);
if (!System.IO.Directory.Exists(targetPath))
System.IO.Directory.CreateDirectory(targetPath);
//Write the file to a FileStream, assign that stream to the webbrowser control.
FileStream fs = new FileStream(strFileName, FileMode.CreateNew, FileAccess.Write);
fs.Write(b, 0, b.Length);
fs.Close();
webBrowserQuizFlash.DocumentCompleted += new WebBrowserDocumentCompletedEventHandler(webBrowserQuizFlash_DocumentCompleted);
webBrowserQuizFlash.Url = new System.Uri(strFileName, System.UriKind.Absolute);
}
}
//Delete the Flash Webbrowser file once it has completed loading.
private void webBrowserQuizFlash_DocumentCompleted(object sender, WebBrowserDocumentCompletedEventArgs e)
{
FileInfo fi = new FileInfo(strFileName);
try
{
fi.Delete();
}
catch (IOException ex)
{
MessageBox.Show("IOException = " + ex); //test code
}
}
Будем благодарны за любые предложения или указания в правильном направлении.
Ура,
Фредерик
PS - при копировании моего кода в этот пост я вижу, что цвет текста после @ "\ images \" все красный; Есть ли проблема с этой частью моего кода, или это артефакт отображения? Должен ли я использовать это вместо: @ "\ images \\";