C# JpegBitmapEncoder сохранить и перезаписать

Я пытаюсь добавить теги в файл JPEG.

Тем не менее, мой алгоритм не позволяет мне перезаписать файл JPEG и позволяет мне только создать новый файл.

  static string file = @"C:\temp\check.jpg";
    static void Main(string[] args)
    {
        LosslessJpegTest(new List<string> { "hello","my name is Bob"});
    }

    private static void LosslessJpegTest(List<string> keywords)
    {
        string original = file;
        const BitmapCreateOptions createOptions = BitmapCreateOptions.PreservePixelFormat;


        Stream originalFileStream = File.Open(original, FileMode.Open, FileAccess.ReadWrite);

        BitmapDecoder decoder = BitmapDecoder.Create(originalFileStream, createOptions, BitmapCacheOption.None);            


        if (decoder.CodecInfo == null || (!decoder.CodecInfo.FileExtensions.Contains("jpg")&& !decoder.CodecInfo.FileExtensions.Contains("jpeg")) || decoder.Frames[0] == null)
            return;

        BitmapMetadata metadata = decoder.Frames[0].Metadata == null
            ? new BitmapMetadata("jpg")
            : decoder.Frames[0].Metadata.Clone() as BitmapMetadata;

        if (metadata == null) return;

        if (metadata.Keywords != null)
        keywords.AddRange(metadata.Keywords);                    

        metadata.Keywords = new ReadOnlyCollection<string>(keywords);

        JpegBitmapEncoder encoder = new JpegBitmapEncoder { QualityLevel = 100 };
        BitmapFrame bmpFrame = BitmapFrame.Create(decoder.Frames[0], decoder.Frames[0].Thumbnail, metadata, decoder.Frames[0].ColorContexts);

        encoder.Frames.Add(bmpFrame);

        Stream newFileStream = File.Open(original, FileMode.Create, FileAccess.ReadWrite);
        encoder.Save(newFileStream);

    }

Выдается следующее исключение: System.IO.IOException: "Процесс не может получить доступ к файлу" C:\temp\check.jpg ", поскольку он используется другим процессом".

Как я могу перезаписать файл новыми тегами? Я не хотел бы сохранять временный файл для этой цели, а затем заменить его оригиналом.

1 ответ

Как можно догадаться из краткого обзора, я бы сказал, что вам, вероятно, нужно закрыть входной поток перед попыткой записи в этот файл.

Другие вопросы по тегам