注册 登录
编程论坛 VFP论坛

请教:修复复制文件文件名会变成小写字母的问题

girlsfriend 发布于 2023-07-23 09:32, 924 次点击
论坛看到这个帖子
https://bbs.bccn.net/viewthread.php?tid=510614&page=1#pid2769726
八楼回复说已经修复了这个BUG,并给了个链接
http://
不知道具体怎么弄,麻烦哪位弄过的指导下,谢谢!
9 回复
#2
csyx2023-07-23 10:39
ccb 说的修复是指他的 VFPA,没有提供独立的修复包。非常在意大小写的话,用 Windows 外壳对象来复制文件好了,例如:
oShell = CreateObject("Shell.Application")
oFolder = oShell.NameSpace('d:\')
oFolder.CopyHere('c:\AAA.txt')


[此贴子已经被作者于2023-7-23 10:40编辑过]

#3
girlsfriend2023-07-23 10:57
回复 2楼 csyx
您好,本人技术有点菜,上面几句我有点看不明白,能否代码写详细点吗,比如说怎么把“c:\aa.txt”拷贝到“d:\AAB.txt”
谢谢
#4
easyppt2023-07-23 11:25
2楼代码的意思是:

c:\AAA.txt 复制到  d:\ 目录下

你自己测试一下,就知道了

例子仅仅给了一个简单复制,如果 文件已存在,如何直接覆盖,好像没写参数。

[此贴子已经被作者于2023-7-23 11:27编辑过]

#5
csyx2023-07-23 11:28
哦,前面的代码只是这个对象提供的复制文件方法,它只完成复制粘贴操作
要同时更名的话,需要再加两行代码

oShell = CreateObject("Shell.Application")
oFolder = oShell.NameSpace('d:\')
oFolder.CopyHere('c:\AAA.txt')
*--
oFile = oFolder.ParseName('AAA.txt')
oFile.Name = 'AAB.txt'
*--
#6
csyx2023-07-23 11:39
以下是引用easyppt在2023-7-23 11:25:18的发言:
例子仅仅给了一个简单复制,如果 文件已存在,如何直接覆盖,好像没写参数。

是的,只写了最基本的操作,也没做任何错误处理,仅仅是提供一种途径
其实方法多的是,如果使用瓜哥的 myfll,有 CopyFiles 函数;如果使用 vfp2c32.fll,有 CopyFileEx 函数;如果熟悉 win32api,有 CopyFile/CopyFileEx;。。。

详细的参数用法,参见微软在线资料:https://learn.
例如要覆盖同名文件,使用参数 16: oFolder.CopyHere('c:\AAA.txt', 16)

[此贴子已经被作者于2023-7-23 11:54编辑过]

#7
foxfans2023-07-23 11:54
pp="D:\AAA.txt"
DECLARE long CopyFile IN "kernel32" String,String,long
IF CopyFile("C:\aaa.txt",pp,0)=1
   ?'ok'
ENDIF
#8
girlsfriend2023-07-23 12:32
万分感谢各位解答,终于解决问题了
#9
sych2023-07-23 16:55
源文件="f:\AAA.txt"  &&此地不分大小写,因为vfp不分大小写
复制到="c:\"  &&和源文件保持一致,磁盘中保存的样子,不是上面的样子
DECLARE long CopyFile IN "kernel32" String,String,long
Declare Long GetLongPathName in win32api String, String @, Long
IF FILE(源文件)
    IF FILE((ADDBS(复制到)+JUSTFNAME(GetOsFileName(源文件))))
        ?"文件已存在,复制失败"
    else
        IF CopyFile(源文件,(ADDBS(复制到)+JUSTFNAME(GetOsFileName(源文件))),0)=1
           ?'ok'
        ENDIF
    endif
ELSE
    ?"源文件不存在,请检查"
endif
RETURN

Function GetOsFileName(tcFileSpec)
Local nLen, cBuff
m.nLen = 260
m.cBuff = Replicate(Chr(0), m.nLen)
m.nLen = GetLongPathName(m.tcFileSpec, @ m.cBuff, m.nLen)
Return Left(m.cBuff, m.nLen)
EndFunc

这段代码是根据一片空白的代码整合出来的
#10
girlsfriend2023-07-25 15:52
回复 9楼 sych
学习了
1