找回密码
 立即注册
收起左侧

TXT文件拼接的问题……

12
回复
14169
查看
[复制链接]
累计签到:87 天
连续签到:1 天
来源: 2013-9-3 08:59:17 显示全部楼层 |阅读模式
5Qter豆
现在手头上有个TXT文件A,里面只有若干行。

每隔段时间 (时间不固定)A 的内容会发生变化。即A里面的所有东西都变成新的了,类似于A文件被同名文件覆盖了那样。


现在的要求是把A每次变化内容都写入B,用append,即把多个不同的A文件拼成一个大TXT文件B。

我用时间循环写,每隔一段时间扫描一遍,但由于变化时间不确定,有时候会写入相同的……

求指点!!我是新手啊啊啊啊!最还能给点代码例子参考参考@@万分感谢!!!

最佳答案

查看完整内容

可以使用QFileSystemWatcher来监视文件变化。 例子可以看下《入门》的15-2
回复

使用道具 举报

累计签到:1632 天
连续签到:2 天
2013-9-3 08:59:18 显示全部楼层
可以使用QFileSystemWatcher来监视文件变化。

例子可以看下《入门》的15-2

点评

貌似只能监视一个文件?我的目的是比如有 A1 A2 A3 3个TXT文件,其中一旦有一个文件变化 就写入相应的 B1 B2 B3 3个对应的文件中,比如 A1变了 就写入 B1,其他不变,但是我用多个信号来连貌似不管用啊……  详情 回复 发表于 2013-9-3 17:29
QFileSystemWatcher 咋用……看不懂啊……能不能写写具体的代码!网上那个例子感觉都有点问题……  详情 回复 发表于 2013-9-3 14:51
回复

使用道具 举报

累计签到:87 天
连续签到:1 天
2013-9-3 14:51:07 显示全部楼层
yafeilinux 发表于 2013-9-3 09:10
可以使用QFileSystemWatcher来监视文件变化。

例子可以看下《入门》的15-2

QFileSystemWatcher 咋用……看不懂啊……能不能写写具体的代码!网上那个例子感觉都有点问题……
回复

使用道具 举报

累计签到:1632 天
连续签到:2 天
2013-9-3 15:36:03 显示全部楼层
20030969 发表于 2013-9-3 14:51
QFileSystemWatcher 咋用……看不懂啊……能不能写写具体的代码!网上那个例子感觉都有点问题…… ...

你下载《Qt Creator快速入门》的源码看看,例程15-2
回复

使用道具 举报

累计签到:87 天
连续签到:1 天
2013-9-3 17:29:12 显示全部楼层
yafeilinux 发表于 2013-9-3 09:10
可以使用QFileSystemWatcher来监视文件变化。

例子可以看下《入门》的15-2

貌似只能监视一个文件?我的目的是比如有 A1 A2 A3 3个TXT文件,其中一旦有一个文件变化 就写入相应的 B1 B2 B3  3个对应的文件中,比如 A1变了 就写入 B1,其他不变,但是我建了N个QFileSystemWatcher 实例,连接对应的信号貌似不管用啊……
回复

使用道具 举报

累计签到:1632 天
连续签到:2 天
2013-9-4 11:01:13 显示全部楼层
20030969 发表于 2013-9-3 17:29
貌似只能监视一个文件?我的目的是比如有 A1 A2 A3 3个TXT文件,其中一旦有一个文件变化 就写入相应的 B1  ...

理论上可以监视多个文件的啊!

修改A1 A2 A3等文件,是在外部修改的,还是程序里面修改的?

点评

用同名文件直接覆盖~类似QQ接收文件覆盖那种的  详情 回复 发表于 2013-9-5 10:44
回复

使用道具 举报

累计签到:87 天
连续签到:1 天
2013-9-5 10:44:46 显示全部楼层
yafeilinux 发表于 2013-9-4 11:01
理论上可以监视多个文件的啊!

修改A1 A2 A3等文件,是在外部修改的,还是程序里面修改的? ...

用同名文件直接覆盖~类似QQ接收文件覆盖那种的
回复

使用道具 举报

累计签到:1632 天
连续签到:2 天
2013-9-5 10:53:59 显示全部楼层
20030969 发表于 2013-9-5 10:44
用同名文件直接覆盖~类似QQ接收文件覆盖那种的

那也是需要程序来完成的吗,比如接收文件。只要是程序来完成的就可以在更改文件的时候发出信号提示文件要被更改了啊!

点评

没看懂需要程序来完成是啥意思。。比如我用QQ不断接收一个文件 同名覆盖这种的……或者冲别处复制过来,覆盖这种的……不是用我编的程序实现的  详情 回复 发表于 2013-9-5 16:13
回复

使用道具 举报

累计签到:87 天
连续签到:1 天
2013-9-5 16:13:20 显示全部楼层
yafeilinux 发表于 2013-9-5 10:53
那也是需要程序来完成的吗,比如接收文件。只要是程序来完成的就可以在更改文件的时候发出信号提示文件要 ...

没看懂需要程序来完成是啥意思。。比如我用QQ不断接收一个文件 同名覆盖这种的……或者从别处复制过来,覆盖这种的……不是用我编的程序实现的 直接复制粘贴这样
回复

使用道具 举报

累计签到:1632 天
连续签到:2 天
2013-9-5 16:53:58 显示全部楼层
20030969 发表于 2013-9-5 16:13
没看懂需要程序来完成是啥意思。。比如我用QQ不断接收一个文件 同名覆盖这种的……或者从别处复制过来,覆 ...

意思是说,接收文件也是在程序中完成的吧,需要代码来实现这个功能吧。这样就可以可以在程序中判断是否接收了新文件啊。如果有新文件了,也就知道了文件被更改了。

点评

不是……是外部对其改动……程序只是用来扫描是否改动……  详情 回复 发表于 2013-9-5 17:19
回复

使用道具 举报

累计签到:87 天
连续签到:1 天
2013-9-5 17:19:24 显示全部楼层
yafeilinux 发表于 2013-9-5 16:53
意思是说,接收文件也是在程序中完成的吧,需要代码来实现这个功能吧。这样就可以可以在程序中判断是否接 ...

不是……是外部对其改动……程序只是用来扫描是否改动……
回复

使用道具 举报

累计签到:1632 天
连续签到:2 天
2013-9-5 17:45:48 显示全部楼层
20030969 发表于 2013-9-5 17:19
不是……是外部对其改动……程序只是用来扫描是否改动……

这样啊。那就只能用前面说的那个监视器了,别的好像没有什么好办法吧。
回复

使用道具 举报

累计签到:17 天
连续签到:1 天
2013-9-9 00:24:31 显示全部楼层
你可以仿照工控的一种算法,四余度模拟量监控算法。不过你用不到那么复杂。我做过改良版,现把方法告诉你:
1:用定时器去比较文件的MD5值,如果A1和B1一样,就不需要copy,
2: 使用copy文件的时候,注意:如果使用QT 的QFILE ,那么就要先删除,然后再拷贝,之间必须有时间间隔,否则在频繁读写的过程中会出错误。第二种方法:使用system 调用shell 命令执行copy ,这样是覆盖,并且不用考虑时间差。
3:关于时间问题,如果非常频繁的写文件,那么你可以写一个线程去监控遍历他们的MD5值。也就是使用while(1);
4:如果你想把更改后的A1追加到B1中,你也可以采用一个中间文件比如~A 来存放上次的文件,这样就是比较A1和~A的MD5值。
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

公告
可以关注我们的微信公众号yafeilinux_friends获取最新动态,或者加入QQ会员群进行交流:190741849、186601429(已满) 我知道了