注册 登录
编程论坛 VFP论坛

vfp 中的COPY FILE TO 命令

asdf_123000 发布于 2021-12-16 15:27, 4154 次点击
vfp 中的COPY FILE FileName1 TO FileName2

COPY FILE创建在FileName1指定其名称的文件的副本。可以使用将文件复制为任何类型的文件。文件在复制不能打开。您必须包括扩展为源文件名FileName1和目标文件名FileName2

问题是,COPY FILE 表1 TO 表2  后,表2是不是处于打开状态?因为停电后,表2是坏的,而表1反倒不坏。
是什么原因,请高手指点!
17 回复
#2
laowan0012021-12-16 15:43
是不是打开的一试便知
#3
吹水佬2021-12-16 20:27
读“表1”写“表2”,读写都要打开文件
如果意外中止写操作,肯定复制“表2”失败,“表2”是不完整的,甚至不能正常使用。
#4
huasinstamps2021-12-20 13:26
和这个命令,表1和表2都是不打开的
#5
wcx_cc2021-12-20 19:01
这个命令,表1和表2应该都不是打开的,复制时,表2应该带后缀: dbf ,否则表2不能用。
 
#6
asdf_1230002021-12-21 12:58
表1和表2应该都不是打开的,复制时,表2可以不带后缀,表2能用。

问题在,复制好后:
第1种情况,正常退出关电脑,表2是能用的。
第2种情况,没有正常退出关电脑,而是发生停电,再打开表2是烂的了,打不开。

问:表2在复制后是不是处于打开状态?为什么会烂表
#7
asdf_1230002021-12-22 10:44
经过多次验证,表2在复制后,应用close all命令后,不处于打开状态。软件未正常退出前,发生停电,照样烂表。
#8
gs25367856782021-12-22 13:26
不知朋友是啥意思?几乎所有的电脑操作代码,都需要在供电正常
的情况下,才能正常使用。
为啥纠结于小概率的【停电】呢?
#9
asdf_1230002021-12-22 14:51
当用户很多的情况下,总有用户会遇到停电。

COPY FILE 表11 TO 表1
COPY FILE 表12 TO 表2
COPY FILE 表13 TO 表3
COPY FILE 表14 TO 表4
...
COPY FILE 表20 TO 表10

一次拷贝10个表,操作是正确的正常的。只有正常退出软件才不烂表,如果停电就烂表(表1-10中,至少烂1至2个表),其中可能存在问题。
#10
吹水佬2021-12-22 15:28
断电绝对有可能出现异常
1、备份
2、不间断电源

#11
asdf_1230002021-12-22 16:17
版主的话总是对的,谢谢,终于可结帖了

本问题就是备份出的问题,10个表备份到另一个文件夹后,停电导致部分烂表,致使备份无效!

提出的问题:COPY FILE 表1 TO 表2  后,表2是正常的,但是停电后,表2坏了。
解决的方法:经过了很多测试,找到了一个解决的办法。
            就是程序语句拷贝后,要操作一下Windows文件系统,停电也不烂表了。
            命令 COPY  TO 后,可能是Windows没有自动关闭文件系统。
#12
吹水佬2021-12-22 19:05
备份过程是否成功应该要有记录,下次启动可以提醒重做
#13
吹水佬2021-12-22 19:08
重要文件备份完成后最好做一下校对
#14
吹水佬2021-12-23 09:12
以下是引用asdf_123000在2021-12-22 16:17:25的发言:

提出的问题:COPY FILE 表1 TO 表2  后,表2是正常的,但是停电后,表2坏了。
解决的方法:经过了很多测试,找到了一个解决的办法。
            就是程序语句拷贝后,要操作一下Windows文件系统,停电也不烂表了。
            命令 COPY  TO 后,可能是Windows没有自动关闭文件系统。

这样看来VFP的 COPY FILE 可能是调用WinAPI的 CreateFile、ReadFile、WriteFile、....
通过缓冲来进行I/O操作,缓存正式存盘还需时间,尤其是有使用了文件安全监控。
试试VFP的FLUSH命令看有无效果,如:
FLUSH 表2.dbf FORCE
觉得开关一下表2应该也可以:
USE 表2
USE




#15
asdf_1230002021-12-23 09:27
谢谢版主提醒!
具体备份,退出就自动备份了,是成功的。
这是中间增加的数据,想防止停电而丢失所做的备份。中间每次变动数据备份是成功了,但不退出系统,备份成功的表仍然烂表,实际上是不成功的。
找到的方法是,打开Windows文件系统,手工对这个中间备份文件夹复制一个。
那么再发生停电,中间备份文件不烂了,但复制的这个文件夹烂表。不知什么程序没有关闭造成的。
#16
asdf_1230002021-12-23 11:43
以下是引用吹水佬在2021-12-23 09:12:37的发言:


这样看来VFP的 COPY FILE 可能是调用WinAPI的 CreateFile、ReadFile、WriteFile、....
通过缓冲来进行I/O操作,缓存正式存盘还需时间,尤其是有使用了文件安全监控。
试试VFP的FLUSH命令看有无效果,如:
FLUSH 表2.dbf FORCE
觉得开关一下表2应该也可以:
USE 表2
USE

试过了,
1、FLUSH对当前工作区的表有保护,对另存的中间备份文件夹无效,一样的烂表。
2、开关一下表,即使是指定了中间备份文件夹路径,仍然烂里面的表。
太弦了,只有手动复制还勉强可行
#17
吹水佬2021-12-23 11:52
回复 16楼 asdf_123000
估计是操作系统环境的问题
另找台机试试,最好是裸机(只装windows),排除其他应用干扰的可能
#18
heibaochen2023-06-09 18:40
[quote]以下是引用asdf_123000在2021-12-22 14:51:08的发言:

当用户很多的情况下,总有用户会遇到停电。

我觉得烂表还是小事,异常断电有很大概率会损坏硬盘,那时候咋得弄?听吹版主的吧,用UPS!
1