2016-09-01 1 views
1
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, это означает, что другие процессы могут читать и записывать в файл. Так где же причина?Ошибка «файл при использовании» при воспроизведении aac при добавлении байтов в aac

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

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: Я обнаружил, что причина, потому что это ААС файл

+0

Когда вы говорите, что 'при записи файла" 3.mp3 "в outputfile.mp3, я открываю выходной файл с помощью MediaPlayer'. Открываете ли вы файл outputfile.mp3 перед выполнением инструкции в Visual Studio или после нее? – RBT

+0

Кстати, не нужно делать как Flush(), так и использование в этом случае. – EJoshuaS

+0

Я не могу воспроизвести вашу проблему. Хотя я использую медиаплеер VLC для открытия файла вывода файла. Не уверен, что это будет иметь значение, поскольку вы использовали другой музыкальный плеер. – RBT

ответ

2

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

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

+0

Знаете ли вы причину для второго случая и как запретить MediaPlayer блокировать разрешение на запись? –

+0

@ HoàngTrầnHuy Вы не можете, любой приличный медиаплеер будет делать то же самое. Вам нужно переосмыслить, почему вы пытаетесь это сделать в первую очередь. –

Смежные вопросы