C# 删除另一个文件后无法创建另一个文件,因为该文件已被另一个进程使用

C# 删除另一个文件后无法创建另一个文件,因为该文件已被另一个进程使用,c#,file,process,C#,File,Process,我知道这是一个非常常见的问题,我尝试使用流程,但它不起作用。所以,我希望用户能够上传照片,创建自己的化身。我要做的是拍摄所选照片,调整其大小,然后裁剪并保存在application/bin中。如果他再次选择另一张照片,我将删除第一张照片并创建另一张。删除照片后,出现以下错误: The process cannot access the file : 'C:\.." because it is being used by another process. 代码: 简单地说,您的进程或其他进程已

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

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


简单地说,您的进程或其他进程已经打开并锁定了该文件,因此您的程序无法打开该文件。通常,由于编码错误,无法正确关闭文件时会发生这种情况

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


如果无法确定哪个进程对文件持有锁定,可以使用调试工具,如process Monitor或process Explorer。这些工具都可以向您显示哪个进程持有文件的锁。

简单地说,要么是您的进程,要么是另一个进程已经打开并锁定了文件,因此您的程序无法打开该文件。通常,由于编码错误,无法正确关闭文件时会发生这种情况

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


如果无法确定哪个进程对文件持有锁定,可以使用调试工具,如process Monitor或process Explorer。这些工具都可以向您显示哪个进程对文件持有锁定。

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


对不起,这个词是“去引用”。我的意思是检查这个图像是否在其他地方被使用并且被锁定。如果是这样,请将其解锁并上载新的图像。

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


对不起,这个词是“去引用”。我的意思是检查这个图像是否在其他地方被使用并且被锁定。如果是这样,请解锁该文件并上载新文件。

运行此代码时,您需要确保文件未处于打开状态。首先处置引用旧文件的所有位图。哦,不要在应用程序bin文件夹中存储任何内容。普通用户没有该目录的写入权限。谢谢您的回答!抱歉,我不太明白您所说的“取消引用”是什么意思。您需要确保在运行此代码时没有保持文件处于打开状态。首先处置引用旧文件的所有位图。哦,不要在应用程序bin文件夹中存储任何内容。普通用户没有该目录的写入权限。谢谢您的回答!对不起,我不太明白你说的“取消引用”是什么意思,我没有打开任何文件。我只是从所选的图像创建另一个图像,它较小且经过裁剪,然后保存到我的应用程序文件夹中。如果文件夹中已存在具有特定名称的文件,我将删除该文件,然后使用新选定的图像创建另一个文件。我不知道在哪里使用这个过程。谢谢你的回答@特雷西:正如前面所说的,问题可能不在你展示的代码中。您似乎正在其他地方使用该文件,即使用化身的地方。Bitmapstring正在锁定文件,直到位图被释放!非常感谢。我认真地发布了整个代码。它在第b行崩溃:b.savepath+file。好的,我试试看。我不打开任何文件。我只是从所选的图像创建另一个图像,它较小且经过裁剪,然后保存到我的应用程序文件夹中。如果文件夹中已存在具有特定名称的文件,我将删除该文件,然后使用新选定的图像创建另一个文件。我不知道在哪里使用这个过程。谢谢你的回答@特雷西:正如前面所说的,问题可能不在你展示的代码中。您似乎正在其他地方使用该文件,即使用化身的地方。Bitmapstring正在锁定文件,直到位图被释放!非常感谢。我认真地发布了整个代码。它在第b行崩溃:b.savepath+file。好的,我会努力的。我真的不明白。您能否更具体地说明取消引用的含义。“我从来没有听说过在这个上下文中使用过这个词。@DavidHeffernan-当时我无法准确地描述这个词。”。我向问题的作者解释了我的意思。我正在对我的答案进行必要的修改。一个程序如何进行
你不能解锁文件吗?当然,解决方法是正确地关闭文件。尝试使用相同的方法。我认为这与文件关闭有关+1@DavidHeffernanI在这里发布了一个显示我的错误的示例。我试着重新命名文件,然后保存它,但没有用,我真的不明白这一点。您能否更具体地说明取消引用的含义。“我从来没有听说过在这个上下文中使用过这个词。@DavidHeffernan-当时我无法准确地描述这个词。”。我向问题的作者解释了我的意思。我正在对我的答案进行必要的更改。如何以编程方式解锁该文件?当然,解决方法是正确地关闭文件。尝试使用相同的方法。我认为这与文件关闭有关+1@DavidHeffernanI在这里发布了一个显示我的错误的示例。我试着重新命名文件,然后保存,但没有成功
  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);