多线程协作 FileStream文件读写操作,读写冲突解决
using System;
using System.Collections.Generic;
using System.IO;
using System.Linq;
using System.Text;
using System.Threading;
using System.Threading.Tasks; namespace ConsoleApplication8
{
/// <summary>
/// 本文的任务是通过多线程在三个文件aa.txt,bb.txt,cc.txt全部写入文件,完成任务之后,
/// 往ee.txt文件写入ok,之后主线程一直轮询去读取ee.txt该文件如果,里面出现ok,则往dd.txt写入内容,最后总任务完成之后删除临时文件ee.txt
/// </summary>
class Program
{
public static int i = ;
static void Main(string[] args)
{
int[] aa = new int[] { , , };
for (int i = ; i <=aa.Length; i++)
{
ParameterizedThreadStart ts = new ParameterizedThreadStart(ProcessData);
Thread th = new Thread(ts);
th.Start(i);
}
while (true)
{
string s = "";
FileStream fs = null;
try
{
fs = new FileStream(@"C:\Users\yiwannuofu\Desktop\\ee.txt", FileMode.Open, FileAccess.Read, FileShare.Read);
}
///如果刚好也有人在操作该文件的时候,指的是有另外一进程在操作该文件,
/// 这里捕获异常继续尝试读取,直至成功,而对应的另一方或几方则睡眠500毫秒再尝试读取
catch (Exception ex)
{ Thread.Sleep(200);
continue;
} byte[] b = new byte[fs.Length];
fs.Read(b, , b.Length);
fs.Flush();
fs.Close(); s = Encoding.UTF8.GetString(b); if (s.Contains("ok"))
{
string BasePath = @"C:\Users\yiwannuofu\Desktop\dd.txt";
StreamWriter sw = new StreamWriter(BasePath);
for (int i= ; i<=; i++)
{
sw.WriteLine(i);
}
sw.Close();
File.Delete(@"C:\Users\yiwannuofu\Desktop\\ee.txt");
break;
}
}
Console.ReadKey(); } private static void ProcessData(object obj)
{
int i = Convert.ToInt32(obj);
string BasePath = @"C:\Users\yiwannuofu\Desktop"; switch (i)
{
case :
BasePath += "\\aa.txt";
break;
case :
BasePath += "\\bb.txt";
break;
case :
BasePath += "\\cc.txt";
break;
}
lock(new object())
{
StreamWriter sw = new StreamWriter(BasePath);
int start = (i - ) * + ;
int end = i * ;
for (int j = start; j <= end; j++)
{
sw.WriteLine(j);
} sw.Close();
i++;
if (i >= )
{ try
{
FileStream sw1 = new FileStream(@"C:\Users\yiwannuofu\Desktop\\ee.txt", FileMode.Create, FileAccess.ReadWrite, FileShare.ReadWrite);
byte[] bs = Encoding.UTF8.GetBytes("ok".ToCharArray());
sw1.Write(bs, , bs.Length);
sw1.Flush();
sw1.Close();
}
///出现异常说明也有另外的进程在操作该文件,睡眠500毫秒,再试机写入内容
catch (Exception ex)
{ Thread.Sleep();
}
}
}
}
}
}
多线程协作 FileStream文件读写操作,读写冲突解决的更多相关文章
- 【IPHONE开发-OBJECTC入门学习】文件的操作,读写复制文件
转自:http://blog.csdn.net/java886o/article/details/9041547 FileTools.h FileTools.m #import "FileT ...
- git操作之冲突解决
应用场景,任哥,我两个人共同修改了git项目上的一个文件.zsh命令行模式 准备工作 简写命令解释 gl=git pullgp=git pushgst=git statusgcmsg=git comm ...
- [ Python ] 文件的读写操作
1. 文件读写操作 读写文件是最常见的 IO 操作, Python 内置了读写文件的函数.在磁盘上读写文件的功能是由操作系统提供的,所以读写文件是请求操作系统打开一个文件对象(通常称为文件描述符),然 ...
- [转]SVN版本冲突解决详解
原文地址:http://blog.csdn.net/windone0109/article/details/4857044 版权声明:本文为博主原创文章,未经博主允许不得转载. 版本冲突原因: 假设A ...
- SVN版本冲突解决详解
SVN版本冲突解决详解 分类: SVN(SubVersion)2009-11-23 15:45 27014人阅读 评论(12) 收藏 举报 svnsubversion服务器文档工作c 版本冲突原因: ...
- 【转】svn冲突问题详解 SVN版本冲突解决详解
(摘自西西软件园,原文链接http://www.cr173.com/html/46224_1.html) 解决版本冲突的命令.在冲突解决之后,需要使用svnresolved来告诉subversion冲 ...
- svn冲突问题详解 SVN版本冲突解决详解
svn冲突问题详解 SVN版本冲突解决详解 (摘自西西软件园,原文链接http://www.cr173.com/html/46224_1.html) 解决版本冲突的命令.在冲突解决之后,需要使用svn ...
- ASP.NET MVC Filters 4种默认过滤器的使用【附示例】 数据库常见死锁原因及处理 .NET源码中的链表 多线程下C#如何保证线程安全? .net实现支付宝在线支付 彻头彻尾理解单例模式与多线程 App.Config详解及读写操作 判断客户端是iOS还是Android,判断是不是在微信浏览器打开
ASP.NET MVC Filters 4种默认过滤器的使用[附示例] 过滤器(Filters)的出现使得我们可以在ASP.NET MVC程序里更好的控制浏览器请求过来的URL,不是每个请求都会响 ...
- .NET 6学习笔记(1)——通过FileStream实现不同进程对单一文件的同时读写
会写这篇纯属机缘巧合,虽然一直以来认为对单一文件的读.写操作是不冲突,可并行的,但实际并未实践过.正好有个UWP的程序要并行读取由Desktop Extension创建的文本,需要有个原型程序来验证, ...
随机推荐
- web 模板引擎
baiduTemplate: http://baidufe.github.io/BaiduTemplate/ artTemplate: https://github.com/aui/artTempl ...
- 10 结构体和类 - —— 《Swift3.0 从入门到出家》
Swift中的面向对象5个要素:枚举.结构体.类.协议.扩展 面向对象研究的是对象,完成一件事情需要多个对象参与,是生活的映射 Swift中结构体和类非常相似,也就是结构体能完成类的所有功能.结构体是 ...
- C++的引用类型【转载】
c++比起c来除了多了类类型外还多出一种类型:引用.这个东西变量不象变量,指针不象指针,我以前对它不太懂,看程序时碰到引用都稀里糊涂蒙过去.最近把引用好好地揣摩了一番,小有收获,特公之于社区,让初学者 ...
- 1020. Tree Traversals (25) ——树的遍历
//题目 通过后续遍历 中序遍历 得出一棵树 ,然后按树的层次遍历打印 PS:以前对于这种用指针的题目是比较头痛的,现在做了一些链表操作后,感觉也不难 先通过后续中序建一棵树,然后通过BFS遍历这棵树 ...
- 微信 unionid 获取 解密数据
1.申请注册微信开放平台 open.weixin.qq.com 2.绑定公众号或者小程序到微信开放平台 3.微信公众号的话,使用微信网页授权获取 unionid https://mp.weixin. ...
- 有趣的java小项目------猜拳游戏
package com.aaa; //总结:猜拳游戏主要掌握3个方面:1.人出的动作是从键盘输入的(System.in)2.电脑是随机出的(Random随机数)3.双方都要出(条件判断) import ...
- 让memcached分布式
memcached是应用最广的开源cache产品,它本身不提供分布式的解决方案,我猜想一方面它想尽量保持产品简单高效,另一方面cache的key-value的特性使得让memcached分布式起来比较 ...
- sublime text3 自动编译php 适合用于简单的php文件执行
1.将php路径放入环境变量中 2. 点击 sublime_text的“工具”->"编译系统"->"编译新系统" { "cmd" ...
- 关于服务端控件textbox的disabled属性设置为disabled后在服务端无法取值的问题
在asp.net 1.x版本中,当textbox控件的disabled属性设置为disabled的时候看,在服务端还是可以通过控件id.text获取到textbox的值的,只是不能输入值而已.但是在以 ...
- Swift 添加自定义响应事件
一,新建一个协议(Protocol) VisitURLProtocol.swift import UIKit protocol VisitURLProtocol{ func didVisitURL(u ...