多线程写文件的问题
我用多线程调用下面的代码时,有的时候可以正确完成任务,有的时候在构造FileStream对象时出错,说是另一个进程正在访问。
查查MSDN,关于FileShare.Write部分写的是:“允许随后打开文件写入。如果未指定此标志,则文件关闭前,任何打开该文件以进行写入的请求(由此进程或另一进过程发出的请求)都将失败。但是,即使指定了此标志,仍可能需要附加权限才能够访问该文件。 ”
他的最后一句话叫我很难理解,什么是附加权限?
这段程序的问题究竟出在哪里?
//创建一个FileStream对象和一个BinaryWriter对象,用于将数据写进文件
FileStream fileStream = null ;
BinaryWriter binaryWriter = null;
try
{
fileStream = fileInfo.Open(FileMode.Open, FileAccess.Write, FileShare.Write);//注意Open方法的参数
}
catch(IOException e)
{
throw new IOException("构造FileStream对象时出错",e);
}
try
{
binaryWriter = new BinaryWriter(fileStream);
}
catch(IOException e)
{
fileStream.Close();
throw new IOException("构造BinaryWriter对象时出错",e);
}
try
{
//将该流的当前位置设置为适当的位置
fileStream.Seek(request.Offset, SeekOrigin.Begin);//此方法可能出现出现 I/O 错误,抛出IOException异常
//将数据块写入文件
binaryWriter.Write(request.DataBlock);//此方法可能出现出现 I/O 错误,抛出IOException异常
}
catch (IOException e)
{
throw new IOException("将数据块写入文件时出错",e);
}
finally
{
//关闭流,BinaryWriter也将关闭FileStream对象,所以无需再调用fileStream.Close()
binaryWriter.Close();
}