首页 诗词 字典 板报 句子 名言 友答 励志 学校 网站地图
当前位置: 首页 > 教程频道 > .NET > C# >

操作多线程向一个文件写数据解决方法

2012-02-24 
操作多线程向一个文件写数据try{intThreadIndexConvert.ToInt32(threadIndex)sw.Start()FileStreamfsn

操作多线程向一个文件写数据
try
                        {
                                int   ThreadIndex   =   Convert.ToInt32(threadIndex);
                                sw.Start();
                                FileStream   fs   =   new   FileStream(this.filePath,   FileMode.Open,   FileAccess.Read,   FileShare.Read);
                                BinaryReader   br   =   new   BinaryReader(fs);
                                FileStream   nfs   =   new   FileStream(this.NewFilePath,   FileMode.Create,   FileAccess.ReadWrite,   FileShare.ReadWrite);
                                BinaryWriter   bw   =   new   BinaryWriter(nfs);

                                int   ReadedLength;
                                byte[]   buffer   =   new   byte[EachFileSize[ThreadIndex]];
                                fs.Seek(FilePosition[ThreadIndex],   SeekOrigin.Begin);
                                ReadedLength   =   br.Read(buffer,   0,   EachFileSize[ThreadIndex]);
                                nfs.Seek(FilePosition[ThreadIndex],   SeekOrigin.Begin);
                                bw.Write(buffer,   0,   ReadedLength);

                                sw.Stop();
                                fs.Close();
                                nfs.Close();
                                br.Close();
                                bw.Close();
                                MessageBox.Show(ThreadIndex.ToString()   +   "done ");
                        }
                        catch   (Exception   ex)
                        {
                                MessageBox.Show(ex.Message);


                        }

private   int[]   FilePosition;//每个线程开始位置;
private   int[]   EachFileSize;//每个线程应读取的大小;

问题:
程序没有异常,但是文件头部分都是空值,EachFileSize倍数(随机)的部分总是空值,不知道是什么原因?
Mutex也没有用
但设成1个线程没有问题。

[解决办法]
没看到你哪里有多线程
[解决办法]
你的程序是否保证了对下边两个Class Level 的变量付值是在每个线程使用它之前? 或者说对它们的读写是否保证了Thread Safe.

private int[] FilePosition;//每个线程开始位置;
private int[] EachFileSize;//每个线程应读取的大小;

[解决办法]
要作线程同步
[解决办法]
文件读可以多线程,写只能单线程吧。
[解决办法]
我假设你各个线程读写的都是不同的文件,否则这里别忘了做同步.
[解决办法]
楼主写的是什么???
没看见哪里用了多线程!!!

热点排行