Ошибка "файл используется" при воспроизведении aac при добавлении байтов в aac

var outputfile = "outputfile.aac";     
var fileList = new List<string>
                {
                    "1.aac",
                    "2.aac",
                    "3.aac",
                    "4.aac",
                    "5.aac",
                    "6.aac"
                };

                foreach (var file in fileList)
                {
                    using (var stream = new FileStream(outputfile, FileMode.Append, FileAccess.Write, FileShare.ReadWrite))
                    {
                        var bytes = File.ReadAllBytes(file);
                        stream.Write(bytes, 0, bytes.Length);
                        stream.Flush();
                    }
                }

Я пытаюсь объединить файлы AAC в fileList в выходной файл. при записи файла "3.aac" в файл outputfile.aac я открываю файл вывода с помощью MediaPlayer, затем FileStream возвращает исключение "файл используется", даже если режим FileShare - ReadWrite, это означает, что другие процессы могут читать и записывать в файл. Так в чем же причина?

Однако в этом случае выходной файл не блокируется

Stream s = resp.GetResponseStream();
                    var fs = File.Exists(outputFile) ? new FileStream(outputFile, FileMode.Append, FileAccess.Write, FileShare.ReadWrite)
                        : new FileStream(outputFile, FileMode.Create, FileAccess.ReadWrite, FileShare.ReadWrite);

                    byte[] buffer = new byte[4096];
                    while (s.CanRead)
                    {
                        int bytesRead = s.Read(buffer, 0, buffer.Length);
                        fs.Write(buffer, 0, bytesRead);
                    }

P/s: я обнаружил, что причина, потому что это файл aac

1 ответ

Решение

Когда вы используете FileShare.ReadWrite Вы разрешаете последующее открытие файла в режиме чтения или записи.

MediaPlayer затем открывает файл с FileShare.Read на его стороне, отказывая вам в доступе к файлу записи.

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