C#如何进行原子文件操作

jiaoshiyao 2017-11-11 12:05:52
有2个txt文件,向A文件写入一行后,再向B写入一行,算是一个原子操作
就跟数据库那样,插入2条数据,有个事务
如何实现
...全文
688 14 打赏 收藏 转发到动态 举报
写回复
用AI写文章
14 条回复
切换为时间正序
请发表友善的回复…
发表回复
jiaoshiyao 2017-11-14
  • 打赏
  • 举报
回复
引用 13 楼 summergo123321 的回复:
[quote=引用 3 楼 jiaoshiyao 的回复:] [quote=引用 2 楼 xuzuning 的回复:] 你只描述了追加,修改或删除,你是如何考虑的? 为实现对任意行的修改(删除),你需要有一个保存各行偏移量的载体,以方便定位到指定行 如果是删除,你还需要有一个是否回收被删除记录所占空间的策略机制 如此算下来,你是在写一个小型数据库系统 所谓 不用数据库 只是不使用商业数据库而已
我只是A.txt最后追加1行文字,同时B.txt最后也追加一行文字, 但是可能存在A.txt追加完成后,B.txt还没追加,程序异常或者系统断电,我想的是,如何实现一个类似数据beginTransaction的事物 A.txt和B.txt全部完成才算完成,否则一个没完成就全部失败,暂时不考虑删除修改等功能。。。[/quote] 给你说个再简单不过的方法, 文本这样写: [12334:3 sdasdasdasdasdasd] 大概解释下,没有后括号,说明语句不完整,发现标签为12334的条完整目数不是3条,说明不完整,直接全删,还有更简单的办法么???办法总比困难多,只要你去想,互相扯那么多理论,有啥用,先搞清你要解决是没问题,解决方法,这方法能不能解决就够了。。。[/quote] 你这是在一个文件里,如果是多个文件呢
mk_lucifer 2017-11-13
  • 打赏
  • 举报
回复
引用 3 楼 jiaoshiyao 的回复:
[quote=引用 2 楼 xuzuning 的回复:] 你只描述了追加,修改或删除,你是如何考虑的? 为实现对任意行的修改(删除),你需要有一个保存各行偏移量的载体,以方便定位到指定行 如果是删除,你还需要有一个是否回收被删除记录所占空间的策略机制 如此算下来,你是在写一个小型数据库系统 所谓 不用数据库 只是不使用商业数据库而已
我只是A.txt最后追加1行文字,同时B.txt最后也追加一行文字, 但是可能存在A.txt追加完成后,B.txt还没追加,程序异常或者系统断电,我想的是,如何实现一个类似数据beginTransaction的事物 A.txt和B.txt全部完成才算完成,否则一个没完成就全部失败,暂时不考虑删除修改等功能。。。[/quote] 给你说个再简单不过的方法, 文本这样写: [12334:3 sdasdasdasdasdasd] 大概解释下,没有后括号,说明语句不完整,发现标签为12334的条完整目数不是3条,说明不完整,直接全删,还有更简单的办法么???办法总比困难多,只要你去想,互相扯那么多理论,有啥用,先搞清你要解决是没问题,解决方法,这方法能不能解决就够了。。。
吉普赛的歌 2017-11-13
  • 打赏
  • 举报
回复
引用 11 楼 summergo123321 的回复:
可能你添加半行就断电了,如果不想这样,方法实在太多,你可能思路一直在受限,总在小圈圈里考虑问题,你要解决的是断电问题,那么解决之中问题的方法实在太多了,说白了就是保证数据完整性,这有无数种方法,和数据库没半毛钱关系。。。比如数据加校验,这是最常用的办法,校验不通过就足以证明数据不完整,你可以在文档里明确指出那些条目是一次事务的数据,发现不完整全删都可以,数据结构,数据结构,没有结构,想凭空完成功能,都是扯犊子。。。
怎么跟数据库没有关系? 其实就是完全是借鉴数据库的事务思路才能做出来
mk_lucifer 2017-11-13
  • 打赏
  • 举报
回复
首先你在A追加半行
引用 2 楼 xuzuning 的回复:
你只描述了追加,修改或删除,你是如何考虑的? 为实现对任意行的修改(删除),你需要有一个保存各行偏移量的载体,以方便定位到指定行 如果是删除,你还需要有一个是否回收被删除记录所占空间的策略机制 如此算下来,你是在写一个小型数据库系统 所谓 不用数据库 只是不使用商业数据库而已
引用 3 楼 jiaoshiyao 的回复:
[quote=引用 2 楼 xuzuning 的回复:] 你只描述了追加,修改或删除,你是如何考虑的? 为实现对任意行的修改(删除),你需要有一个保存各行偏移量的载体,以方便定位到指定行 如果是删除,你还需要有一个是否回收被删除记录所占空间的策略机制 如此算下来,你是在写一个小型数据库系统 所谓 不用数据库 只是不使用商业数据库而已
我只是A.txt最后追加1行文字,同时B.txt最后也追加一行文字, 但是可能存在A.txt追加完成后,B.txt还没追加,程序异常或者系统断电,我想的是,如何实现一个类似数据beginTransaction的事物 A.txt和B.txt全部完成才算完成,否则一个没完成就全部失败,暂时不考虑删除修改等功能。。。[/quote] 可能你添加半行就断电了,如果不想这样,方法实在太多,你可能思路一直在受限,总在小圈圈里考虑问题,你要解决的是断电问题,那么解决之中问题的方法实在太多了,说白了就是保证数据完整性,这有无数种方法,和数据库没半毛钱关系。。。比如数据加校验,这是最常用的办法,校验不通过就足以证明数据不完整,你可以在文档里明确指出那些条目是一次事务的数据,发现不完整全删都可以,数据结构,数据结构,没有结构,想凭空完成功能,都是扯犊子。。。
啊存 2017-11-13
  • 打赏
  • 举报
回复
想做成这样浏览器查看和下发指令!把原来用短信下发的指令在浏览器界面下发。
啊存 2017-11-13
  • 打赏
  • 举报
回复
啊存 2017-11-13
  • 打赏
  • 举报
回复
大家好 我有一个GSM短信模式远程控制器,模块有GPRS功能,想改gprs模式,我有短信模式源代码,现在要改gprs模式求修改源代码,重酬!V信同手机:15915637388
threenewbee 2017-11-12
  • 打赏
  • 举报
回复
https://msdn.microsoft.com/zh-cn/library/4z36sx0f(v=vs.110).aspx
闭包客 2017-11-12
  • 打赏
  • 举报
回复
事务执行成功与否,用一个标识来表示。
xuzuning 2017-11-11
  • 打赏
  • 举报
回复
你只描述了追加,修改或删除,你是如何考虑的? 为实现对任意行的修改(删除),你需要有一个保存各行偏移量的载体,以方便定位到指定行 如果是删除,你还需要有一个是否回收被删除记录所占空间的策略机制 如此算下来,你是在写一个小型数据库系统 所谓 不用数据库 只是不使用商业数据库而已
jiaoshiyao 2017-11-11
  • 打赏
  • 举报
回复
如果这样实现了,一些轻量级应用就可以不用数据库了
吉普赛的歌 2017-11-11
  • 打赏
  • 举报
回复
上面的几位说了这就是写一个数据库系统。 不才献丑细讲一下: 数据库之所以能实现事务, 一个很关键的因素是有日志这个东西。 不仅仅是数据。 数据库要完成某个事务, 首先是写日志, 待完成事务, 再将日志中这个事务标识为已完成。 如果事务未完成就被外界打断, 则会根据日志将数据文件中的内容回滚到事务开始之前的状态。 在数据库服务重启后, 也会检查日志中有哪些事务尚未提交或回滚,并进行相应的处理。 水平有限, 也许某些细节有偏差, 但大致是这个样子。 如果你想自己来实现数据库的事务, 这绝对不是 “增、删、改、查” 这么简单。 你不愿意用数据库, 目的是什么? 数据库比文件操作慢? 一是因为数据库考虑了事务,但你自己来实现文件的事务很难说比数据库更高效。 二来可能是数据库方面缺少优化, 你们公司需要专业的DBA。 当然, 如果你有决心设计自己的文件事务, 我最上面写的你也可以参考(思路是一样的,必须有日志这个中间媒介)。
  • 打赏
  • 举报
回复
懂得数据库系统事务设计原理(而不是“只会用”)自然就知道怎样写,这样的代码不管是把一大块数据写入文件还是一个记录写入文件,都等于自己写一个数据库系统。
jiaoshiyao 2017-11-11
  • 打赏
  • 举报
回复
引用 2 楼 xuzuning 的回复:
你只描述了追加,修改或删除,你是如何考虑的? 为实现对任意行的修改(删除),你需要有一个保存各行偏移量的载体,以方便定位到指定行 如果是删除,你还需要有一个是否回收被删除记录所占空间的策略机制 如此算下来,你是在写一个小型数据库系统 所谓 不用数据库 只是不使用商业数据库而已
我只是A.txt最后追加1行文字,同时B.txt最后也追加一行文字, 但是可能存在A.txt追加完成后,B.txt还没追加,程序异常或者系统断电,我想的是,如何实现一个类似数据beginTransaction的事物 A.txt和B.txt全部完成才算完成,否则一个没完成就全部失败,暂时不考虑删除修改等功能。。。
java,c/c++,php,c#安全编码规范,从代码层面避免被入侵 1 业务安全编码规范 6 1.1 输入验证和数据合法性校验 6 1.1.1 避免SQL注入 6 1.1.2 避免XML注入 6 1.1.3 避免跨站点脚本(XSS) 7 1.1.4 避免跨站请求伪造(CSRF) 8 1.1.5 避免敏感信息泄露 12 1.2 安全框架 12 1.2.1 Apache Shiro安全框架 12 1.2.2 webSecrity安全框架 13 1.2.3 Enterprise Security API 13 2 基础安全编码规范 15 2.1 声明和初始化 15 2.1.1 避免类初始化的相互依赖 15 2.2 表达式 16 2.2.1 不可忽略方法的返回值 16 2.2.2 不要引用空指针 16 2.2.3 使用Arrays.equals()来比较数组的内容 16 2.3 数字类型和操作 17 2.3.1 防止整数溢出 17 2.3.2 避免除法和取模运算分母为零 18 2.4 类和方法操作 18 2.4.1 数据成员声明为私有,提供可访问的包装方法 18 2.4.2 敏感类不允许复制 18 2.4.3 比较类的正确做法 19 2.4.4 不要硬编码敏感信息 19 2.4.5 验证方法参数 19 2.4.6 不要使用过时、陈旧或低效的方法 20 2.4.7 数组引用问题 20 2.4.8 不要产生内存泄露 20 2.5 异常处理 21 2.5.1 不要忽略捕获的异常 21 2.5.2 不允许暴露异常的敏感信息 21 2.5.3 不允许抛出RuntimeException, Exception,Throwable 22 2.6 多线程编程 23 2.6.1 确保共享变量的可见性 23 2.6.2 确保共享变量的操作原子的 24 2.6.3 不要调用Thread.run(),不要使用Thread.stop()以终止线程 26 2.6.4 确保执行阻塞操作的线程可以终止 26 2.6.5 相互依存的任务不要在一个有限的线程池执行 27 2.7 输入输出 27 2.7.1 程序终止前删除临时文件 27 2.7.2 检测和处理文件相关的错误 27 2.7.3 及时释放资源 27 2.8 序列化 28 2.8.1 不要序列化未加密的敏感数据 28 2.8.2 在序列化过程中避免内存和资源泄漏 29 3 其他参考资料 30

110,538

社区成员

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

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

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