【求助】如何使一段代码或者完整执行或者不执行

fordawn 2015-06-16 02:33:06
比如我要改10个文件的名字
但是可能由于文件占用,其中一个或多个改不了
这样就非常不好

所以我想问如何能使一段代码要么完整执行,要么不执行
就是说10个文件要么都改,如果出错,就都不改。

谢谢
...全文
470 20 打赏 收藏 转发到动态 举报
写回复
用AI写文章
20 条回复
切换为时间正序
请发表友善的回复…
发表回复
fordawn 2015-06-16
  • 打赏
  • 举报
回复
引用 18 楼 Z65443344 的回复:
引用 16 楼 fyzzy1943 的回复:
[quote=引用 8 楼 starfd 的回复:] 感觉对于你这个update最简单的文件事务就是 修改前复制一份,commit时删除备份,rollback时复制回原位置再删除备份
这样的话rollback是不是也有失败的可能。比如已经修改过的在rollback之前被占用了。
既然你是复制出来改名字,怎么可能被占用呢 你复制出来之前,根本没有程序知道你这里可能会有一个叫这个名字的文件,它为什么会去打开这个文件?? 如果你是copy一份的做法,那么就基本不存在失败的可能性了 最多就是删除原文件的时候可能会删除不成功. 你可以过段时间重试,或者可以干脆不去管它. 反正你的重命名的目的已经达到,有多余的文件其实不是大问题[/quote] 比如这种情况 存在A1,A2 然后A1改成A2,A2改成A1,所以我现在都是改成一个中间名,然后再改。这样基本是第一步才会出问题。现在我还是在修改的时候建一个文件名数组,出异常就改回去,这样比较简单。
fordawn 2015-06-16
  • 打赏
  • 举报
回复
引用 17 楼 starfd 的回复:
的确有次可能,这不是简单的方案能解决的,除非你修改成功了,但不退出占用
是的,所以现在我还是在修改的时候建一个文件名数组,出异常就改回去,这样比较简单。
於黾 2015-06-16
  • 打赏
  • 举报
回复
引用 16 楼 fyzzy1943 的回复:
引用 8 楼 starfd 的回复:
感觉对于你这个update最简单的文件事务就是 修改前复制一份,commit时删除备份,rollback时复制回原位置再删除备份
这样的话rollback是不是也有失败的可能。比如已经修改过的在rollback之前被占用了。
既然你是复制出来改名字,怎么可能被占用呢 你复制出来之前,根本没有程序知道你这里可能会有一个叫这个名字的文件,它为什么会去打开这个文件?? 如果你是copy一份的做法,那么就基本不存在失败的可能性了 最多就是删除原文件的时候可能会删除不成功. 你可以过段时间重试,或者可以干脆不去管它. 反正你的重命名的目的已经达到,有多余的文件其实不是大问题
  • 打赏
  • 举报
回复
的确有次可能,这不是简单的方案能解决的,除非你修改成功了,但不退出占用
fordawn 2015-06-16
  • 打赏
  • 举报
回复
引用 8 楼 starfd 的回复:
感觉对于你这个update最简单的文件事务就是 修改前复制一份,commit时删除备份,rollback时复制回原位置再删除备份
这样的话rollback是不是也有失败的可能。比如已经修改过的在rollback之前被占用了。
fordawn 2015-06-16
  • 打赏
  • 举报
回复
引用 13 楼 Z65443344 的回复:
所以你应该采用8楼的办法 不要直接去改文件 而是copy一份出来改名字,然后再放回去. 再删除原文件. 当然原文件如果删不掉其实也不影响什么
copy出来那份是不是当备份比较好
fordawn 2015-06-16
  • 打赏
  • 举报
回复
引用 8 楼 starfd 的回复:
感觉对于你这个update最简单的文件事务就是 修改前复制一份,commit时删除备份,rollback时复制回原位置再删除备份
有道理
於黾 2015-06-16
  • 打赏
  • 举报
回复
所以你应该采用8楼的办法 不要直接去改文件 而是copy一份出来改名字,然后再放回去. 再删除原文件. 当然原文件如果删不掉其实也不影响什么
於黾 2015-06-16
  • 打赏
  • 举报
回复
引用 11 楼 fyzzy1943 的回复:
[quote=引用 9 楼 Z65443344 的回复:] 这就好比一个保护人质的任务 如果不能保证全部人质都活着,那就都杀了.这是可以做到的 而如果说: 如果你杀了一个人之后,发现其他的人杀不掉,那么之前那个人就别杀了 这可能吗??
我改文件之前 都试一遍能不能改,您觉得怎么样?[/quote] 问题你不真的去改,怎么知道能改还是不能改. 而且上一秒能改,下一秒改不了了,这哪有准. 因为外部程序什么时候占用文件又不归你控制.
fordawn 2015-06-16
  • 打赏
  • 举报
回复
引用 9 楼 Z65443344 的回复:
这就好比一个保护人质的任务 如果不能保证全部人质都活着,那就都杀了.这是可以做到的 而如果说: 如果你杀了一个人之后,发现其他的人杀不掉,那么之前那个人就别杀了 这可能吗??
我改文件之前 都试一遍能不能改,您觉得怎么样?
fordawn 2015-06-16
  • 打赏
  • 举报
回复
引用 3 楼 shingoscar 的回复:
这和原子操作有半毛钱关系?
我只是表达这个意思
於黾 2015-06-16
  • 打赏
  • 举报
回复
这就好比一个保护人质的任务 如果不能保证全部人质都活着,那就都杀了.这是可以做到的 而如果说: 如果你杀了一个人之后,发现其他的人杀不掉,那么之前那个人就别杀了 这可能吗??
  • 打赏
  • 举报
回复
感觉对于你这个update最简单的文件事务就是 修改前复制一份,commit时删除备份,rollback时复制回原位置再删除备份
於黾 2015-06-16
  • 打赏
  • 举报
回复
还有,一段代码要么执行要么不执行,这也是很业余的说法 业务逻辑可以执行或回滚 代码没执行之前你怎么知道它执行不了呢? 已经执行了的代码,你还怎么让它"不执行"?
  • 打赏
  • 举报
回复
於黾 2015-06-16
  • 打赏
  • 举报
回复
引用 2 楼 fyzzy1943 的回复:
[quote=引用 1 楼 shingoscar 的回复:] 只能这么弄,改之前记下所有文件名字 出错了以后把已经改过的改回去
没有那种原子操作的什么的嘛?[/quote] 不要在网络上瞎抄名词 你先弄明白啥叫原子操作 改10个文件的名字和原子操作有半毛钱关系?? 而且你这又不是数据库,文件改名也不支持回滚.
Jason Lu52 2015-06-16
  • 打赏
  • 举报
回复
改之前都记下来,错了,再还回去,只能这样把
Poopaye 2015-06-16
  • 打赏
  • 举报
回复
这和原子操作有半毛钱关系?
fordawn 2015-06-16
  • 打赏
  • 举报
回复
引用 1 楼 shingoscar 的回复:
只能这么弄,改之前记下所有文件名字 出错了以后把已经改过的改回去
没有那种原子操作的什么的嘛?
Poopaye 2015-06-16
  • 打赏
  • 举报
回复
只能这么弄,改之前记下所有文件名字 出错了以后把已经改过的改回去

110,536

社区成员

发帖
与我相关
我的任务
社区描述
.NET技术 C#
社区管理员
  • C#
  • Web++
  • by_封爱
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告

让您成为最强悍的C#开发者

试试用AI创作助手写篇文章吧