向 aac 添加字节时播放 aac 时出错 "file in use"
Error "file in use" when playing aac while appending bytes to 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();
}
}
我尝试将 fileList 中的 aac 文件加入到输出文件中。当写文件“3.aac”到outputfile.aac时,我用MediaPlayer打开outputfile,然后FileStreamreturns异常"file in use",甚至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 文件
当您使用 FileShare.ReadWrite
时,您允许随后以读取或写入模式打开文件。
MediaPlayer 然后打开带有 FileShare.Read
的文件,拒绝您对该文件的写入权限。
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 文件加入到输出文件中。当写文件“3.aac”到outputfile.aac时,我用MediaPlayer打开outputfile,然后FileStreamreturns异常"file in use",甚至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 文件
当您使用 FileShare.ReadWrite
时,您允许随后以读取或写入模式打开文件。
MediaPlayer 然后打开带有 FileShare.Read
的文件,拒绝您对该文件的写入权限。