设置winform应用程序使用的文件夹的权限

时间:2010-05-05 10:11:44

标签: c# permissions directory

我的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 \\”;

2 个答案:

答案 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);
}