浏览 4586 次
锁定老帖子 主题:C# 文件操作问题
精华帖 (0) :: 良好帖 (0) :: 新手帖 (0) :: 隐藏帖 (0)
|
|
---|---|
作者 | 正文 |
发表时间:2007-07-13
读路径2下的文件A,如果路径1下已经有文件A,则先删除路径1下的文件A,然后从路径2下拷贝文件A到路径1下, 没有,则直接从路径2下拷贝文件A到路径1下.如此反复.如果读文件C时出错,则原来删除或拷贝的文件都要复原.即:路径1,路径2下的文件保持在执行所有操作之前的状态. 就跟数据处理的事务差不多,出错了就ROLLBACK. 怎么实现?请高手们指点,先谢过了!!! 声明:ITeye文章版权属于作者,受法律保护。没有作者书面许可不得转载。
推荐链接
|
|
返回顶楼 | |
发表时间:2007-07-15
cp -f /path/to/file2 /path/to/file1
|
|
返回顶楼 | |
发表时间:2007-07-15
liulc 写道 如此反复.如果读文件C时出错,则原来删除或拷贝的文件都要复原.即:路径1,路径2下的文件保持在执行所有操作之前的状态.就跟数据处理的事务差不多,出错了就ROLLBACK.
看看我理解的对不对,假如拷贝的文件很多,要花上半个小时,15分钟后电源断了,或者用户中断程序执行了,那么所有的文件都要恢复到拷贝之前的状态。(Transaction Rollback) 二楼的方法不行吧,cp执行了一半电源断了已经拷贝的文件还能自动rollback? 这可是个很高级的需求了。最简单的实现方法要求操作系统支持File System Transactions,据我所知,在Windows,Mac,Linux,FreeBSD这些主流OS里面只有Windows Vista和下个版本的Windows Server Longhorn支持这个。(很久没有更新OS知识了,说错了请指正。) Vista和Longhorn支持这些API: CreateFileTransacted CopyFileTransacted MoveFileTransacted DeleteFileTransacted CreatedHardLinkTransacted CreateSymbolicLinkTransacted CreateDirectoryTransacted RemovedDirectoryTransacted MSDN Magazine有篇文章,可以看看:http://msdn.microsoft.com/msdnmag/issues/07/07/NTFS/default.aspx 想想看啊,Windows Update在更新系统,更新了上百个系统文件了,忽然断电了,得,Windows就死了。所以这个feature很重要。 如果没有只为Vista写程序这么好运,那么唯一的方法是自己实现two-phase-commit protocol了。这不是一个容易的事,可以去翻翻数据库实现的书。 我以前有个项目,就是因为自己实现two-phase-commit protocol的代价太大,所有的东西都放到数据库去了。 |
|
返回顶楼 | |