api函数copyfile的使用问题?谢谢你的帮助。

时间:2022-09-29 14:01:23
我已在global external function 中声明
FUNCTION ulong CopyFile(ref string lpExistingFileName,ref string  &
      lpNewFileName,ulong bFailIfExists) LIBRARY "kernel32.dll" 
在cb_1.clicked中:
copyfile("C:\My Documents\temp.text","\\server\ss\temp.txt",False)

PB提示:
c0082: reference argument must be a non-constant and a non-readonly variable reference 

是怎么回事呀?

14 个解决方案

#1


在API的函数中不能直接使用字符串的,必须使用变量的。
你将源和目的都放到变量中就可以了。

#2


试试看先。

#3


to :pbworm(pb菜鸟) 
编译时通过,运行的时候PB提示。
powerbuilder execution error (R0015)
error:error calling external function copyfile in clicked  event of object
cb_1 of w_main

#4


to:pbworm(pb菜鸟) 

我想做一个版本自动更新的程序,不知道你有没有。给个例子我,好吗?

#5


我昨天才问过这个问题:

定义如下:
FUNCTION boolean CopyFileA(ref string cfrom, ref string cto, boolean flag) LIBRARY "Kernel32.dll"

string l_from, l_to

ls_from = "C:\My Documents\temp.text" //源文件,必须存在
ls_to   = "\\server\ss\temp.txt"

rtn = CopyFileA(l_from, l_to, l_flag)
MessageBox("CopyFile", string(rtn)) 

另外:
pb8中有函数filecopy()

#6


to:: fzymr(风中游牧人) 
我还想问一下,我要是用这个函数传一批文件速度会很慢吗?每个文件有300k左右,共38个文件8M多。

#7


同意楼上的

另,我没有版本更新的例子。

#8


to ylg007(棕子) :
   没注意,想不到都是熟人!copyfile的速度挺快的,可以用一个进度条显示一下。如果用他做
版本更新不是很好,因为如果有文件夹就不好处理了!

to pbworm(pb菜鸟) :
   老兄,辗转在多个帖子之间,很累吧!

#9


to : fzymr(风中游牧人) 
让用户使用固定的文件夹就可以了。

#10


哈哈,在回答的同时,自己也在学习啊!

有文件夹也是可以处理的,建议你们使用listBox的disList()函数将指定目录下的所有文件都列出来,参数好象是使用55,这样连所有的子目录也可以得到,然后copy就可以了。我估计windows在copy目录的时候使用的也是每个文件copy的方法。

#11


to : pbworm(pb菜鸟) 
我是考虑在连接数据库时就更新。要使用函数得到文件的修改时间呢。

#12


我没有做过,但我是这样考虑的。

如果每次都全部copy的话,如果文件比较多和大的话,速度上有一定的问题。其实大部分的更新和升级并不是全部的文件都重新修改了,而只是修改了部分的文件。这样的话,可以考虑在服务器上设置一个.txt或.ini文件,将所有修改了的文件的名称和路径放到里面。
这样当程序启动的时候,自动的读取这个文件,判断是否做个更新以及更新了什么文件,然后只copy更新了的文件就可以了。

#13


我就是这么做的

#14


谢谢pbworm(pb菜鸟)、fzymr(风中游牧人)。

#1


在API的函数中不能直接使用字符串的,必须使用变量的。
你将源和目的都放到变量中就可以了。

#2


试试看先。

#3


to :pbworm(pb菜鸟) 
编译时通过,运行的时候PB提示。
powerbuilder execution error (R0015)
error:error calling external function copyfile in clicked  event of object
cb_1 of w_main

#4


to:pbworm(pb菜鸟) 

我想做一个版本自动更新的程序,不知道你有没有。给个例子我,好吗?

#5


我昨天才问过这个问题:

定义如下:
FUNCTION boolean CopyFileA(ref string cfrom, ref string cto, boolean flag) LIBRARY "Kernel32.dll"

string l_from, l_to

ls_from = "C:\My Documents\temp.text" //源文件,必须存在
ls_to   = "\\server\ss\temp.txt"

rtn = CopyFileA(l_from, l_to, l_flag)
MessageBox("CopyFile", string(rtn)) 

另外:
pb8中有函数filecopy()

#6


to:: fzymr(风中游牧人) 
我还想问一下,我要是用这个函数传一批文件速度会很慢吗?每个文件有300k左右,共38个文件8M多。

#7


同意楼上的

另,我没有版本更新的例子。

#8


to ylg007(棕子) :
   没注意,想不到都是熟人!copyfile的速度挺快的,可以用一个进度条显示一下。如果用他做
版本更新不是很好,因为如果有文件夹就不好处理了!

to pbworm(pb菜鸟) :
   老兄,辗转在多个帖子之间,很累吧!

#9


to : fzymr(风中游牧人) 
让用户使用固定的文件夹就可以了。

#10


哈哈,在回答的同时,自己也在学习啊!

有文件夹也是可以处理的,建议你们使用listBox的disList()函数将指定目录下的所有文件都列出来,参数好象是使用55,这样连所有的子目录也可以得到,然后copy就可以了。我估计windows在copy目录的时候使用的也是每个文件copy的方法。

#11


to : pbworm(pb菜鸟) 
我是考虑在连接数据库时就更新。要使用函数得到文件的修改时间呢。

#12


我没有做过,但我是这样考虑的。

如果每次都全部copy的话,如果文件比较多和大的话,速度上有一定的问题。其实大部分的更新和升级并不是全部的文件都重新修改了,而只是修改了部分的文件。这样的话,可以考虑在服务器上设置一个.txt或.ini文件,将所有修改了的文件的名称和路径放到里面。
这样当程序启动的时候,自动的读取这个文件,判断是否做个更新以及更新了什么文件,然后只copy更新了的文件就可以了。

#13


我就是这么做的

#14


谢谢pbworm(pb菜鸟)、fzymr(风中游牧人)。