【问题标题】:cannot create another file after delete another because it is used by another process删除另一个文件后无法创建另一个文件,因为它被另一个进程使用
【发布时间】:2014-04-09 11:05:25
【问题描述】:

我知道这是一个很常见的问题,我尝试使用进程,但它不起作用。所以,我希望用户能够上传照片,创建自己的头像。我所做的是拍摄选定的照片,调整其大小,然后将其裁剪并保存在应用程序/bin 中。如果他再次选择另一张照片,我会删除第一张照片并创建另一张。删除照片后,出现此错误:

The process cannot access the file : 'C:\.." because it is being used by another process. 

代码:

  private void Button_Click_1(object sender, RoutedEventArgs e)
    {
        try
        {

         Microsoft.Win32.OpenFileDialog dlg = new Microsoft.Win32.OpenFileDialog();
         dlg.Title = "Open Image";
         dlg.Filter = "Image files (*.jpg, *.jpeg, *.jpe, *.jfif, *.png) | *.jpg; *.jpeg; *.jpe; *.jfif; *.png";

            if (dlg.ShowDialog() == true)
            {
                string fileName = dlg.FileName;
                Uri uri = new Uri(fileName, UriKind.RelativeOrAbsolute);
                BitmapImage bit = new BitmapImage(uri);
                Bitmap b = new Bitmap(fileName);
                b = ResizeImage(b, 100, 100);
                b = CropCircleImage(b);

              string path = System.AppDomain.CurrentDomain.BaseDirectory + @"UserPhotos\";
              string file =Button.Content.ToString()+".bmp";

                if (File.Exists(path + file))
                    File.Delete(path + file);

              //after it gets out from the if statement, I get the error
                  b.Save(path + file);       

                Uri newuri = new Uri(path + file, UriKind.RelativeOrAbsolute);

               ((ButtonLogin)sender).Image= new BitmapImage(newuri);

【问题讨论】:

  • 您需要确保在运行此代码时没有保持文件打开。首先处理所有引用旧文件的位图。哦,请不要在应用程序 bin 文件夹中存储任何内容。普通用户没有对该目录的写入权限。
  • 感谢您的回答!抱歉,我不明白您所说的“取消引用”是什么意思

标签: c# file process


【解决方案1】:

这可能是因为您正在更新特定用户的图像,并且您试图删除旧的图像并在旧图像正在使用时上传更新的图像。尝试“取消引用”旧的,然后上传新的。

对不起,取消引用这个词。我的意思是检查该图像是否在其他地方使用并被锁定。如果是,请解锁并上传新的。

【讨论】:

  • 我不太明白这个。您能否更具体地说明取消引用的含义。这不是我听说过在这种情况下使用的术语。
  • @DavidHeffernan - 当时我无法准确描述单词。我向问题的作者解释了我的意思。我正在对我的答案进行必要的更改。
  • 如何以编程方式解锁文件?当然解决方案是正确关闭文件。
  • 尝试相同。我认为这与文件关闭有关。 +1 @大卫赫弗南
  • 我在这里发布了一个显示我的错误的示例。我试图重命名文件,然后保存它,但它没有工作onedrive.live.com/redir?resid=C4D9AAB68574ED9C%21109
【解决方案2】:

简而言之,您的进程或其他进程已打开该文件并将其锁定,因此您的程序无法打开该文件。这通常发生在由于编码错误而无法正确关闭文件时。

您的代码中的错误可能不在您显示的代码中。错误很可能出现在您未显示的代码中。打开文件但无法关闭文件的代码。

如果您无法确定哪个进程对文件进行了锁定,您可以使用诸如 Process Monitor 或 Process Explorer 之类的调试工具。这些工具都可以告诉你哪个进程持有文件的锁。

【讨论】:

  • 我没有打开任何文件。在我将其保存在我的应用程序文件夹中之后,我只是从选定的图像创建另一个图像,该图像更小且被裁剪。如果文件夹中已存在具有特定名称的文件,则将其删除,然后使用新选择的图像创建另一个文件。我不知道在哪里使用进程。谢谢你的回答!
  • @Tracey:如前所述,问题可能不在您显示的代码中。您似乎在其他地方(即正在使用头像的地方)使用该文件。 Bitmap(string) 正在锁定文件,直到 Bitmap 被释放!
  • 谢谢。我认真地发布了整个代码。它在以下行崩溃:b.save(路径+文件)。好的,我会努力的
猜你喜欢
  • 1970-01-01
  • 2012-08-04
  • 2014-05-26
  • 2016-09-21
  • 2019-04-12
  • 2019-05-24
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多