如何更安全地覆写数据文件

如何更安全地覆写数据文件,第1张

转载

如何更安全地覆写数据文件

经常地,程序在开始执行某项任务需要从文件读取数据。在任务完成后数据得到更新,新的数据会覆写到之前读取的文件中。怎么将数据写回到文件呢?一个直觉的方案是:

with open(datafile, 'w') as f:

f.write(data)

在通常情况下,它能够正确地完成写回数据的任务。如果出于某种原因文件打开失败,通常也不会握族轮有人忘记处理。但是,当写入 *** 作失败了呢?

时不时地编译程序看到 gcc 大把地警告:

警告:忽略声明有 warn_unused_result 属性的‘write’的返回值 [-Wunused-result]

在 Python 中,写文件时如果失败会抛出异常,上层的异常处理机制似乎能够作出相应的应对。但是,真的尽力了吗?

我也曾以为这样不会出问题。直到有一天,本地信箱里出现了这样的错误信息:

OSError: [Errno 28] No space left on device

可能是由于内核的某个 bug,我本来就所剩无几的 /home 分区没空闲空间了。一个 cronjob 在写回数据时发生异常。于是,新的数据没能写入文件。那旧数据呢?因为是以「写」方式打开文件,所以它也没了……

在那次事件之后,那段写回数据的代码变成了这个样子:

with open(datafile + '.tmp', 'w') as f:

f.write(t)

# if the above write failed (because disk is full), the old data should be kept

os.rename(datafile + '.tmp', datafile)

注意:测试表明不使用with或者显式地关闭文件的做法是有问题的,即使在 CPython 中。

try:

open('/dev/full', 'w').write('abc')

except:

print('fine.')

在 Python 2.7 中会打印错误信息,Python 3.3.0 中无任何信息。都没有预料中的异常被穗毕捕获。

>>>python t.py

>>>python2 t.py

close failed in file object destructor:

IOError: [Errno 28] No space left on device

今天之所以写这个,是因为 Arch Linux CN 的群服务器遇到磁盘配额用尽的问题。XMPP 服务器 Prosody 在写入联系人段信信息时只写了一小部分,大部分数据丢失。这里有 bug 报告。

2013年7月21日更新:Sublime Text 2 作为商业软件,竟然不仅不采用「新建+重命名」的方式写入文件,而且连写入是否成功都不检查。难怪 Linux 版中文输入法的问题迟迟不修复,原来连造成用户数据丢失的问题都无所谓。

说个具体的需求 你这太模糊了

import java.io.FileInputStream

import java.io.FileNotFoundException

import java.io.FileOutputStream

import java.io.IOException

import java.io.InputStream

import java.io.OutputStream

public class NewFile {

public static void main(String[] args) {

InputStream is = null

OutputStream os = null

try {

is = new FileInputStream("D:\\abc.txt")

os = new FileOutputStream("D:\\abd.txt"缓隐粗扰镇)

int b = -1

while ((b = is.read()) != -1) {

os.write(b)

}

} catch (FileNotFoundException e) {

// TODO Auto-generated catch block

e.printStackTrace()

} catch (IOException e) {

// TODO Auto-generated catch block

e.printStackTrace()

} finally {

try {

os.close()

is.close()

} catch (IOException e) {

// TODO Auto-generated catch block

e.printStackTrace()

}

}

}

}

这个程序,你可以把写一个字符串去接读取到的文件内容,然后获取文件内字符长度把字符串的每一位都改成你要的字符就好了,最后把修改好的字符串再写回源文件就好了,怎么把字符串输出到文件中去 百携差度就好了 有很多

恢复被强制删除的文件的方法

1、对于那些桌面上误删的文件,一般情况下,我们是可以直接点击 电脑桌 面上回收站,然后在回收站中找到被删除的文件后右键点击还原,即可恢复被删除的文件。但是要注意的是,这种乎辩方法只适用于在删除文件后,我们并没有进行磁盘清理或清空回收站等 *** 作,所以一旦我们在删除文件后又进行了垃圾清理,那么在回收站里是找不到任何内容的。

2、先点击开始—运行选项,在里面输入regedit 回车后,打开 注册表 编辑器,按电脑提示依次展开相关链接。接着要在左侧空白处新建主键单元,并把它重命名为“645FFO40--5081--101B--9F08--00AA002F954E”,同时要把默认选项中主键的键值改为回收站,最后只需重启电脑,即可找回被删除的文件。

3、可利用一些第三方软件中的恢复误删文件功能,重新找回岁猜缺被删除的文件。例如我们可以利用360安全卫士中的电脑优化来恢复文件,从而达到最终目的。

4、点击被删除文件之前所在的磁盘,然后按照搜索—恢复—扫描磁盘—搜索已删除文件的兆贺 *** 作顺序,在搜索出来的文件里逐个查找自己所需要的文件,然后右键还原即可。


欢迎分享,转载请注明来源:内存溢出

原文地址: http://outofmemory.cn/tougao/8221372.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2023-04-14
下一篇 2023-04-14

发表评论

登录后才能评论

评论列表(0条)

保存