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 ответ
Как можно догадаться из краткого обзора, я бы сказал, что вам, вероятно, нужно закрыть входной поток перед попыткой записи в этот файл.