| 网站首页 | 业界新闻 | 小组 | 威客 | 人才 | 下载频道 | 博客 | 代码贴 | 在线编程 | 编程论坛
共有 77 人关注过本帖
标题:关于vfp中copy to 后文件名中字母不是大写而是小写问题
只看楼主 加入收藏
chychychy
Rank: 3Rank: 3
等 级:论坛游侠
帖 子:450
专家分:148
注 册:2015-4-18
结帖率:95.65%
收藏
 问题点数:20 回复次数:7 
关于vfp中copy to 后文件名中字母不是大写而是小写问题
这个问题似乎有点钻牛角的味道,请论坛内大佬指教,用vfp的语句方式能否解决?(查询了论坛内以前帖子和问dp都没有解决)
因工作关系需要导出文件夹(用大写字母,比如下面语句)和文件名(用考生身份证号),但用copy to导出的文件名中字母都自动为小写,尤其以考生身份证号命名的文件中有x就即为不方便
以前帖子

帖子1:如何将文件名中的小写字母重命名为大写字母
https://bbs.bc-cn.net/thread-507797-1-1.html

帖子2:如何解决VFP中用copy to 命令复制图片时文件名由小写字母转为大写字母
https://bbs.bc-cn.net/viewthread.php?tid=427181&highlight=copy%2Bto

帖子3:copy file后文件名大小写问题

https://bbs.bc-cn.net/viewthread.php?tid=513962&highlight=%B4%F3%D0%A1%D0%B4

帖子4:请教:修复复制文件文件名会变成小写字母的问题;这个帖子里有方法,一是BUG并给了个链接(帖子1页给链接了),但链接个人有点愚笨不会用,二是下面方式,不同路径可以,同一路径就不行了。
pp="D:\AAA.txt"
DECLARE long CopyFile IN "kernel32" String,String,long
IF CopyFile("C:\aaa.txt",pp,0)=1
   ?'ok'
ENDIF
https://bbs.bc-cn.net/thread-512686-1-1.html

测试导出文件夹语句,里面的A导出后都是a了
sj = TTOC(DATETIME(), 1)
ml='\编排数据'+sj
wjm11=ml+'\拟彩印A01'
COPY TO (wjm11) FIELD 准考证号,考生姓名,科目 TYPE XL5 FOR BZ1='1'
搜索更多相关主题的帖子: 文件名 小写 帖子 字母 copy 
昨天 16:58
csyx
Rank: 20Rank: 20Rank: 20Rank: 20Rank: 20
来 自:火星
等 级:版主
威 望:37
帖 子:826
专家分:3264
注 册:2018-3-13
收藏
得分:0 
copy to 之后,用 MoveFile 重命名一次即可

用 myfll 的话
copy to (wjm11) ...
MoveFiles(wjm11, wjm11)

否则
copy to (wjm11) ...
Declare Long MoveFile in win32api String, String
MoveFile(wjm11, wjm11)


这家伙很懒,啥也没留下
昨晚 19:09
chychychy
Rank: 3Rank: 3
等 级:论坛游侠
帖 子:450
专家分:148
注 册:2015-4-18
收藏
得分:0 
回复 2楼 csyx
谢谢,为何我测试还是小写
程序代码:
&&&获取桌面路径方法一

DECLARE LONG SHGetSpecialFolderPath IN Shell32 LONG, STRING@, LONG, LONG
cPath = SPACE(260)
SHGetSpecialFolderPath(0, @cPath, 0x10, 0)
cPath = LEFT(cPath, AT(0h00,cPath)-1)

sj = TTOC(DATETIME(), 1)
ml=cPath+'\编排数据'+sj
wjm=ml+'\完成总'+sj
wjm1=ml+'\A01'
wjm2=ml+'\A02'
wjm3=ml+'\A03'
wjm4=ml+'\A04'

wjm11=ml+'\拟彩印A01'
wjm21=ml+'\拟彩印A02'
wjm31=ml+'\拟彩印A03'
wjm41=ml+'\拟彩印A04'

MD &ml

? ml
COPY TO (wjm11) FIELD 准考证号,考生姓名,科目 TYPE XL5 FOR BZ1='1'
Declare Long MoveFile in win32api String, String
MoveFile(wjm11, wjm11)
昨晚 20:46
foxfans
Rank: 5Rank: 5
等 级:贵宾
威 望:15
帖 子:125
专家分:333
注 册:2021-10-23
收藏
得分:0 
cSrc="C:\AAA.png"
cDest="C:\BBB.PNG"
DECLARE long CopyFile IN "kernel32" String@,String@,long
IF CopyFile(@cSrc,@cDest,1)=1
   ?'ok'
ENDIF
'如果是小写,可能没刷新
昨晚 20:52
chychychy
Rank: 3Rank: 3
等 级:论坛游侠
帖 子:450
专家分:148
注 册:2015-4-18
收藏
得分:0 
回复 4楼 foxfans
谢谢,不同文件名测试确实可以,相同文件名测试了不行呢
昨晚 21:05
foxfans
Rank: 5Rank: 5
等 级:贵宾
威 望:15
帖 子:125
专家分:333
注 册:2021-10-23
收藏
得分:0 
相同文件名你复制在同一个文件夹当然不行了,可以给一个临时文件过渡,假如在同一文件夹同名情况
DECLARE INTEGER CopyFile IN kernel32.dll STRING lpExistingFile, STRING lpNewFile, INTEGER bFailIfExists
DECLARE INTEGER DeleteFile IN kernel32.dll STRING lpFileName
cSrc="c:\测试.png"
cTmp="c:\测试.PNG.tmp"
cDest="c:\测试.PNG"
IF CopyFile(cSrc, cTmp, 0) <> 0
   DeleteFile(cSrc)
   IF CopyFile(cTmp,cDest,0)<>0
      *ok
      DeleteFile(cTmp)
   ENDIF
ENDIF




[此贴子已经被作者于2025-12-2 21:44编辑过]

昨晚 21:10
chychychy
Rank: 3Rank: 3
等 级:论坛游侠
帖 子:450
专家分:148
注 册:2015-4-18
收藏
得分:0 
回复 6楼 foxfans
高手!谢谢。受你启发,可以借助中间临时文件,或者旧文件小写,新文件大写也可以。下面代码测试正确

程序代码:
&&&获取桌面路径方法一

DECLARE LONG SHGetSpecialFolderPath IN Shell32 LONG, STRING@, LONG, LONG
cPath = SPACE(260)
SHGetSpecialFolderPath(0, @cPath, 0x10, 0)
cPath = LEFT(cPath, AT(0h00,cPath)-1)
&&? cPath

sj = TTOC(DATETIME(), 1)
ml=cPath+'\编排数据'+sj

MD &ml

wjm=ml+'\完成总'+sj
wjm1=ml+'\A01'
wjm2=ml+'\A02'
wjm3=ml+'\A03'
wjm4=ml+'\A04'

SORT ON px,组别,序号 TO &wjm  

DECLARE LONG MoveFile IN win32api STRING, STRING

* 处理 A01
wjm11 = ml + '\拟彩印A01'
wjm11_lower = ml + '\拟彩印a01'  && 使用小写文件名

COPY TO (wjm11_lower) FIELD 准考证号, 考生姓名, 科目 TYPE XL5 FOR BZ1='1'

tempFile = ml + '\_tempA01'
MoveFile(wjm11_lower + ".xls", tempFile + ".xls")
MoveFile(tempFile + ".xls", wjm11 + ".xls")

* 处理 A02
wjm21 = ml + '\拟彩印A02'
wjm21_lower = ml + '\拟彩印a02'

COPY TO (wjm21_lower) FIELD 准考证号, 考生姓名, 科目 TYPE XL5 FOR BZ1='2'

*tempFile = ml + '\_tempA02'
*MoveFile(wjm21_lower + ".xls", tempFile + ".xls")
*MoveFile(tempFile + ".xls", wjm21 + ".xls")
MoveFile(wjm21_lower + ".xls", wjm21 + ".xls")
昨晚 21:49
吹水佬
Rank: 20Rank: 20Rank: 20Rank: 20Rank: 20
等 级:版主
威 望:451
帖 子:10908
专家分:43527
注 册:2014-5-20
收藏
得分:0 
用 CREATE 或 FCREATE 应该也可以
如:
CREATE TABLE TmpTable (a i, b i)
SELECT * FROM TmpTable INTO TABLE MyTable
将数据再 append 进去就可以
3 小时前
快速回复:关于vfp中copy to 后文件名中字母不是大写而是小写问题
数据加载中...
 
   



关于我们 | 广告合作 | 编程中国 | 清除Cookies | TOP | 手机版

编程中国 版权所有,并保留所有权利。
Powered by Discuz, Processed in 0.223783 second(s), 9 queries.
Copyright©2004-2025, BC-CN.NET, All Rights Reserved