多线程操作同一个文件,向文件写数据,能不能实现?
这个问题已经困扰我好久了,请各位高手帮忙,先谢谢大家了
我的线程是单独放在一个类里面,通过创建这个类的对象来创建线程,本来想用锁来控制线程,但是线程是在不同对象里的,所以没法控制,用lock,mutex,monitor都没用,但现在又遇到多线程写同一个文件这个问题,真是这个问题搞死了,
我的结构如下:
class A
{
..........
private void bt_select_Click(object sender, System.EventArgs e)
{
....
for(int i=0;i <xmllist.Count;i++)
{
B b=new B(xmllist[i],i);
}
....
}
..........
}
Class B
{
......
public B(string ip,string i)
{
Thread thd = new Thread(new ThreadStart(ExcuteImport));
j=i+1;
thd.Name= "线程 "+j+ ",支队ip: "+ip;
sb_log.Append( "/*******************************/ ");
sb_log.Append( "【 "+thd.Name+ "】 ");
thd.Start();
}
.......
private void writeFileLog()
{
DateTime dt=DateTime.Now;
FileStream fs;
string path=Directory.GetCurrentDirectory()+ "\\log\\ ";
string filename=dt.ToString( "d ")+ ".log ";
StreamWriter writeFileLog;
if(!Directory.Exists(path))
{
Directory.CreateDirectory(path);
}
fs=new FileStream(path+filename,FileMode.OpenOrCreate,FileAccess.Write,FileShare.ReadWrite);
writeFileLog=new StreamWriter(fs);
writeFileLog.Write(sb_log);
writeFileLog.Close();
fs.Close();
}
}
------解决方案--------------------可以啊 异步操作
------解决方案--------------------要用lock 在同一时刻只能有一个线程写该文件
------解决方案--------------------要确保同一时刻只能有一个线程操作该文件。。。。
------解决方案--------------------线程同步一定要小心呀
------解决方案--------------------lock吧...
不过我上个程序里面发现有lock锁不住的东西...........
------解决方案--------------------.NET Framework 类库
FileOptions 枚举
注意:此枚举在 .NET Framework 2.0 版中是新增的。
表示用于创建 FileStream 对象的附加选项。
成员名称 说明
Asynchronous 指示文件可用于异步读取和写入。
public FileStream(string path, FileMode mode, FileAccess access, FileShare share, int bufferSize, FileOptions options);
------解决方案--------------------可以将所有写文件的操作交给一个线程来做,其他来调用并Lock
------解决方案--------------------