C#位图无效参数

C#位图无效参数,c#,bitmap,azure-storage-blobs,filestream,parallel.foreach,C#,Bitmap,Azure Storage Blobs,Filestream,Parallel.foreach,下面是我正在尝试做的:获取一个装满图像的文件夹,对它们执行优化,并将它们存储在同一个文件中 我得到一个错误: System.ArgumentException Message = Parameter is not valid. 从第行开始: using (var bitmap = new Bitmap(image)) 我认为这与文件被打开和阻止访问有关,但我不确定。我知道我使用的文件路径是正确的,并且它是一个充满图像的文件夹。有人能帮我吗 string[] folder = Direc

下面是我正在尝试做的:获取一个装满图像的文件夹,对它们执行优化,并将它们存储在同一个文件中

我得到一个错误:

System.ArgumentException
  Message = Parameter is not valid.
从第行开始:

using (var bitmap = new Bitmap(image))
我认为这与文件被打开和阻止访问有关,但我不确定。我知道我使用的文件路径是正确的,并且它是一个充满图像的文件夹。有人能帮我吗

 string[] folder = Directory.GetFiles(GetSourceDirectory());

        Parallel.ForEach(folder, (file) =>
        {
            using (var fileStream = File.Open(file, FileMode.Open, FileAccess.ReadWrite, FileShare.ReadWrite))
            {
                var image = fileStream.Name;
                Console.WriteLine(image);
                Console.ReadLine();
                using (var bitmap = new Bitmap(image))
                {
                    using (var quantized = quantizer.QuantizeImage(bitmap, 1, 1))
                    {
                        var blob = container.GetBlockBlobReference(fileStream.Name);
                        try
                        {
                            quantized.Save(fileStream, ImageFormat.Png);
                        }
                        catch (ArgumentException e)
                        {
                            Console.WriteLine(e.Message);
                            Console.ReadLine();
                            Console.WriteLine();
                            throw;
                        }

                        blob.UploadFromStreamAsync(fileStream).Wait();

                    }
                }
            }
        });

这是因为您正在使用filestream同时进行读取和写入

如果您更改了文件。打开到

使用(var fileStream=File.Open(File,FileMode.Open,FileAccess.Read,FileShare.ReadWrite))

它将允许你这样做

使用(var位图=新位图(图像))

但是,很明显,当您尝试使用fileStream变量进行编写时,您会遇到问题


因此,我认为您必须更改它,这样您就不会有嵌套的using语句。

FileStream.Name只提供文件名,如“image.jpg”,您是否尝试过使用(var bitmap=new bitmap(FileStream))

为什么不打开文件,创建一个新文件,处理旧文件中的每个条目,然后放入新文件中,完成后,重命名或删除旧文件,并将新文件重命名为旧文件名?