我的winform应用程序会定期从SQL数据库中提取一个Flash文件,将其写入临时文件夹,将其显示在webbroswer控件中,然后将其从临时文件夹中删除。我的应用程序创建临时文件夹(如果它不存在)。临时文件夹位于'System.Environment.CurrentDirectory'。
我的问题是临时文件夹的权限经常变为只读,然后我的应用程序无法删除该文件。有时问题会立即发生,有时我可以在应用程序发生之前多次运行它。
如何确保删除该文件?
我添加了删除临时文件夹的代码,然后每次写入时重新创建它,但这并没有解决我的问题。
只有我的应用程序需要访问此文件夹,并且该文件夹仅保存这些闪存图像。
我考虑过使用通用的'temp'文件夹,但是在某处可能会导致问题。
另外,当我将临时文件夹放在'D:\'时,我遇到了同样的问题。
我在Windows XP上使用VS2008。该应用程序将在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 \\”;
答案 0 :(得分:0)
您可以使用System.IO.Path.GetTempPath()
来获取临时文件夹。
我认为由于文件被某些进程锁定,您在删除时遇到问题。您可以通过使用MoveFileEx
功能在下次重新启动时删除它来解决这个问题。
答案 1 :(得分:0)
我认为访问问题来自另一个锁定文件的应用程序。执行此类操作的一个常见应用程序组是来自您的防病毒程序的on access扫描程序。
要深入了解访问您文件的人员,您应该使用Process Monitor深入了解哪些人会阻止您的文件。
您也可以对代码进行一些更改:
//Write the file to a FileStream, assign that stream to the webbrowser control.
using(FileStream fs = new FileStream(strFileName, FileMode.CreateNew, FileAccess.Write))
{
fs.Write(b, 0, b.Length);
}