BBYR Achieve
返回信息流
这是一条镜像帖。来源:北邮人论坛 / dot-net / #2577同步于 2010/12/13
dotNET机器人发帖

[合集] 【已解决】询问一个问题(更新)

snoopyboy
2010/12/13镜像同步0 回复
☆─────────────────────────────────────☆ aroma (aroma) 于 (Mon Nov 15 16:28:57 2010) 提到: 就是两个进程同时同时访问一个数据文件,例如csv文件,如果同时访问的话就会有错误。如何避免同时访问? 如果是两个线程的话可以用lock来解决,那么两个进程呢? ps:具体情况这样的:完全独立的两个程序分别读取同一个文件夹中的csv文件,一个进程读完后就将这个文件删掉,所有的csv文件都只能被其中一个进程读取。我担心会不会一个进程读取过程中另一个进程也读取,这样的话就达不到我的要求了 ps:按照7楼版主的方法解决问题了,非常感谢。mutex进程间和线程间都可以使用,mutex也是继承了waithandle,作用都差不多。 ☆─────────────────────────────────────☆ wardensky (wiwi) 于 (Mon Nov 15 18:38:00 2010) 提到: 用流加载? 我前一段时间同时加载一个图片的时候,用流加载解决了这个问题。你可以试一下。 【 在 aroma (aroma) 的大作中提到: 】 : 就是两个进程同时同时访问一个数据文件,例如csv文件,如果同时访问的话就会有错误。如何避免同时访问? : 如果是两个线程的话可以用lock来解决,那么两个进程呢? ☆─────────────────────────────────────☆ wks (cloverprince) 于 (Mon Nov 15 19:09:29 2010) 提到: 我记得同时访问一个文件不会出错吧。一个读一个写甚至两个同时写也没问题吧。要不然,日志记录是如何实现的? ☆─────────────────────────────────────☆ ahomer (水上蓝心) 于 (Mon Nov 15 20:32:46 2010) 提到: 文本文件直接载入内存,分别读写应该没问题 我不知道lz采用什么机制读取, 1、进程级访问可以创建标记文件,即当一个进程开始读取则创建一个标识文件, 一个进程读取文件前先判断标记文件是否存在,如果存在就不读取。 做好程序出错、掉电等异常的处理。 可以在每次读取csv文件前check进程列表,查看要读取csv的两个进程是否存在,如果csv在进程列表中都不存在,可以把标记文件删除。 2、csv不大的话,直接copy一份吧。。。最后再merge 【 在 wks 的大作中提到: 】 : 我记得同时访问一个文件不会出错吧。一个读一个写甚至两个同时写也没问题吧。要不然,日志记录是如何实现的? : -- : 免费贴代码:http://wksprivate.appspot.com/pastebin/ : ................... ☆─────────────────────────────────────☆ aroma (aroma) 于 (Mon Nov 15 20:47:03 2010) 提到: 现在按照第一个方法实现的,发上来就是想看看有没有更好的方法,比如像线程中的lock一样专门处理这个的方法。 感谢很有耐心的回答。 【 在 ahomer 的大作中提到: 】 : 文本文件直接载入内存,分别读写应该没问题 : 我不知道lz采用什么机制读取, : 1、进程级访问可以创建标记文件,即当一个进程开始读取则创建一个标识文件, : ................... ☆─────────────────────────────────────☆ aroma (aroma) 于 (Mon Nov 15 20:47:57 2010) 提到: 一个读一个写报错。微软的东西都只有第一个打开的进程拥有写的权利 【 在 wks 的大作中提到: 】 : 我记得同时访问一个文件不会出错吧。一个读一个写甚至两个同时写也没问题吧。要不然,日志记录是如何实现的? : -- : 免费贴代码:http://wksprivate.appspot.com/pastebin/ : ................... ☆─────────────────────────────────────☆ ahomer (水上蓝心) 于 (Mon Nov 15 21:34:30 2010) 提到: 把读写csv文件的方法用mutex 封装起来, 利用guid创建 mutex,然后提供访问,也是一种方法 会比创建标记文件简单些。 这类似lock住文件的读写,如果根据guid创建的mutex已经存在 说明有进程在进行读写中,另外一个进程直接跳过 【 在 aroma (aroma) 的大作中提到: 】 : 现在按照第一个方法实现的,发上来就是想看看有没有更好的方法,比如像线程中的lock一样专门处理这个的方法。 : 感谢很有耐心的回答。 ☆─────────────────────────────────────☆ ahomer (水上蓝心) 于 (Mon Nov 15 21:40:37 2010) 提到: bool createdNew = true; using (Mutex mutex = new Mutex(true, "2F7C55CF-23F9-4318-B50D-33F11EF53EA5", out createdNew)) { if (createdNew) { //read or write csv file... } else { //break~ } } 【 在 ahomer (水上蓝心) 的大作中提到: 】 : 把读写csv文件的方法用mutex 封装起来, : 利用guid创建 mutex,然后提供访问,也是一种方法 : 会比创建标记文件简单些。 : ................... ☆─────────────────────────────────────☆ snoopyboy (patpat~) 于 (Mon Nov 15 22:15:45 2010) 提到: 顶~~ 【 在 ahomer (水上蓝心) 的大作中提到: 】 : bool createdNew = true; : using (Mutex mutex = new Mutex(true, "2F7C55CF-23F9-4318-B50D-33F11EF53EA5", out createdNew)) : { : ................... ☆─────────────────────────────────────☆ ahomer (水上蓝心) 于 (Mon Nov 15 22:50:22 2010) 提到: Mutex可以用于进程间同步,当用于进程间同步时,mutex 称为“命名 mutex”。必须给它指定一个名称,才能使两个应用程序访问同一个 mutex 对象。 使用GUID创建一个mutex的目的在于GUID是全球唯一的,可以标识多个进程的共享区域。 可以尝试用用命名mutex改你原先的程序,看看效果,也可以做个小实验先。 【 在 aroma 的大作中提到: 】 : 就是两个进程同时同时访问一个数据文件,例如csv文件,如果同时访问的话就会有错误。如何避免同时访问? : 如果是两个线程的话可以用lock来解决,那么两个进程呢? : ps:具体情况这样的:完全独立的两个程序分别读取同一个文件夹中的csv文件,一个进程读完后就将这个文件删掉,所有的csv文件都只能被其中一个进程读取。我担心会不会一个进程读取过程中另一个进程也读取,这样的话就达不到我的要求了 : ................... ☆─────────────────────────────────────☆ ahomer (水上蓝心) 于 (Mon Nov 15 22:51:26 2010) 提到: visual studio/tool/create guid 可以创建一个唯一的guid ☆─────────────────────────────────────☆ ahomer (水上蓝心) 于 (Mon Nov 15 22:51:56 2010) 提到: 我的ip怎么变成 上海铁通来 汗。。 ☆─────────────────────────────────────☆ snoopyboy (patpat~) 于 (Mon Nov 22 12:11:32 2010) 提到: 现在还是...IP库旧了 【 在 ahomer (水上蓝心) 的大作中提到: 】 : 我的ip怎么变成 上海铁通来 : 汗。。
订阅后,新回复会通过你的通知中心匿名送达。
0 条回复
暂无回复 · 你可以订阅本帖等待新回复。