Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/327.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# C-进程无法访问该文件,因为另一进程正在使用该文件_C# - Fatal编程技术网

C# C-进程无法访问该文件,因为另一进程正在使用该文件

C# C-进程无法访问该文件,因为另一进程正在使用该文件,c#,C#,当我选择一个已经存在于/Images目录中的文件时,问题就出现了,我想它只是无法覆盖,异常是在FileStream行FileMode.Create中抛出的 如果我选择了一个不在/Images目录下的文件,它可以正常工作,并像应该的那样将文件复制到Images目录 谢谢:您最初是如何加载图像的?如果未更改CacheOption的默认值,则BitmapImage对象将锁定该文件。您需要指定BitmapCacheOption.OnLoad: 你最初是如何加载图像的?如果未更改CacheOption的默

当我选择一个已经存在于/Images目录中的文件时,问题就出现了,我想它只是无法覆盖,异常是在FileStream行FileMode.Create中抛出的

如果我选择了一个不在/Images目录下的文件,它可以正常工作,并像应该的那样将文件复制到Images目录


谢谢:

您最初是如何加载图像的?如果未更改CacheOption的默认值,则BitmapImage对象将锁定该文件。您需要指定BitmapCacheOption.OnLoad:


你最初是如何加载图像的?如果未更改CacheOption的默认值,则BitmapImage对象将锁定该文件。您需要指定BitmapCacheOption.OnLoad:


假设您从image文件夹中的所有图像创建位图,这听起来像是Bitmap类的一个已知问题—在调用dispose之前,它会对创建位图的文件保持文件锁定。另请参见此线程:

Hans Passant在此线程中提供了以下解决方法:


假设您从image文件夹中的所有图像创建位图,这听起来像是Bitmap类的一个已知问题—在调用dispose之前,它会对创建位图的文件保持文件锁定。另请参见此线程:

Hans Passant在此线程中提供了以下解决方法:


尝试对代码进行一些修改

设置打开文件的写入权限

public static Image LoadImageNoLock(string path) {
        using (var ms = new MemoryStream(File.ReadAllBytes(path))) {
            return Image.FromStream(ms);
        }
    }

尝试对代码进行一些修改

设置打开文件的写入权限

public static Image LoadImageNoLock(string path) {
        using (var ms = new MemoryStream(File.ReadAllBytes(path))) {
            return Image.FromStream(ms);
        }
    }

我只是想在@Thomas Levesque的评论中发布一些对我有用的东西

FileStream stream = new FileStream("Images/" + name + ".jpg", FileMode.Create, FileAccess.Write);

我只是想在@Thomas Levesque的评论中发布一些对我有用的东西

FileStream stream = new FileStream("Images/" + name + ".jpg", FileMode.Create, FileAccess.Write);

编译器无法识别FromStream您需要对System.Drawing的引用以使用示例中的Image类-OP使用的是WPF,而不是System。在代码中绘制的Image类是System.Windows.Controls.Image。无论如何,您不需要将图像加载到MemoryStream中。您只需打开一个文件流,从中加载映像,然后关闭该流。编译器无法识别来自Stream的映像。您需要对System.Drawing的引用以使用示例中的映像类-OP使用的是WPF,而不是System。在代码中绘制的映像类是System.Windows.Controls.image。无论如何,您不需要将图像加载到MemoryStream中。你可以打开一个文件流,从中加载图像,然后关闭流。我的图像是图像类型,而不是位图图像,所以我不能使用所有这些,有没有办法使用图像类型?谢谢托马斯:我有一个类似的问题,而你是唯一一个指出真正问题的人。我想删除图像控件中显示的图像。在看到你的帖子之前,我一直试图将图像源设置为null,然后执行System.GC.Collect等操作,但在看到你的帖子之后,我意识到问题在于我最初加载图像的方式!我的图像是图像类型,而不是位图图像,所以我不能使用所有这些,有没有一种图像类型的方法?谢谢托马斯:我有一个类似的问题,只有你指出了真正的问题。我想删除图像控件中显示的图像。在看到你的帖子之前,我一直试图将图像源设置为null,然后执行System.GC.Collect等操作,但在看到你的帖子之后,我意识到问题在于我最初加载图像的方式!如何将图像加载到图像对象中?如何将图像加载到图像对象中?
FileStream stream = new FileStream(imageLocation, FileMode.Open);
Image image = new Image();
BitmapImage bi = new BitmapImage();
bi.BeginInit();
bi.StreamSource = stream;
bi.CacheOption = BitmapCacheOption.OnLoad;
bi.EndInit();
image.Source = bi;
image.Height = 15;
btn.Content = image;
stream.Close();
stream.Dispose();