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();
}
}
fileList의 aac 파일을 outputfile에 결합하려고합니다. outputfile.aac에 파일 "3.aac"을 쓸 때 MediaPlayer로 outputfile을 열면 FileStream은 예외로 "file in use"를 반환하고 FileShare 모드는 ReadWrite이기 때문에 다른 프로세스가 파일을 읽고 쓸 수 있음을 의미합니다. 이유는 무엇입니까?aac에 바이트를 추가하는 동안 aac을 재생하는 중 "file in use"오류가 발생했습니다.
그러나,이 경우 출력 파일
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의 차단되지 않은 : 당신은 당신이 파일의 이후 개방을 허용 FileShare.ReadWrite
사용할 때 이유는 AAC 파일
''3.mp3 "을 outputfile.mp3에 쓸 때 MediaPlayer로 출력 파일을 엽니 다. - Visual Studio에서 또는 그 이후의 명령문을 사용하여 실행하기 전에 outputfile.mp3 파일을여시겠습니까? – RBT
덧붙여서,이 경우에는 Flush()와 Using을 모두 할 필요가 없습니다. – EJoshuaS
문제를 재현 할 수 없습니다. VLC 미디어 플레이어를 사용하여 파일 출력 파일을 엽니 다. 다른 음악 플레이어를 사용했기 때문에 어떤 차이가 있는지 확실하지 않습니다. – RBT