PB10调用FindFirstFile和FindNextFile实现遍历文件夹,得到的文件名是不对

wang_quan_li 2008-05-13 03:59:23
PB10调用FindFirstFile和FindNextFile实现遍历文件夹,得到的文件名是不对
在PB10中调用中文文件名称乱码,也就是奇数个字符相加起来是正常的文件名称,偶数个字符是乱码,多于出来的,英文字符没有问题.
如:应该是 文章编号.TXT,而实际调用结果为 文恼章卤编嗪号?.TXT
说是PB10 UNICODE字符集问题,我把函数该为ALIAS FOR "FindFirstFileA;Ansi"或ALIAS FOR "FindFirstFileW"都不行
到底该怎么弄
谢谢
...全文
502 13 打赏 收藏 转发到动态 举报
AI 作业
写回复
用AI写文章
13 条回复
切换为时间正序
请发表友善的回复…
发表回复
sdhp 2008-05-15
  • 打赏
  • 举报
回复
我用Unicode的
FUNCTION ulong FindFirstFile(string lpFileName,ref WIN32_FIND_DATA lpFindFileData) LIBRARY "kernel32.dll" ALIAS FOR "FindFirstFileW" //
FUNCTION ulong FindNextFile(ulong hFindFile,ref WIN32_FIND_DATA lpFindFileData) LIBRARY "kernel32.dll" ALIAS FOR "FindNextFileW" //


type win32_find_data from structure
unsignedlong att
s_filetime c_time
s_filetime a_time
s_filetime w_time
unsignedlong h_size
unsignedlong l_size
unsignedlong dwreserved0
unsignedlong dwreserved1
character cfilename[260]
character calternatefilename[16]
end type


long hfind
string strpath
strpath="D:\。。。。。。\" + '*.*'
WIN32_FIND_DATA FindFileData;
hfind = FindFirstFile(strpath, FindFileData);
messagebox("",findfiledata.cfilename)
if (hFind = -1 ) then
messagebox("警告","服务器路径错误,请联系管理员!!")
return -2
else
do while (FindNextFile(hFind, FindFileData) <> 0)
messagebox("",findfiledata.cfilename)
loop
end if


PB10.2.1 Build 9914 测试中文文件名可以

奇怪,为什么你说 ALIAS FOR "FindFirstFileW"不行 呢??
sdhp 2008-05-15
  • 打赏
  • 举报
回复
我就纳了闷了,照道理FindFirstFileA(filepath + '*.*', FindFileData);这一句在PB10里面应该都没法成功执行的啊,如果按照你的写法

在PB10里面,理论上来说不管你的filepath是不是ANSI的,你的'*.*'一定是Unicode的,如果不用FindFirstFileW能成功执行吗?
sdhp 2008-05-15
  • 打赏
  • 举报
回复
问你两个问题:你的filepath一定也要是英文的吧,如果有中文是不是也不行?
还有个问题我等一下再问
sdhp 2008-05-14
  • 打赏
  • 举报
回复
你FindFileData怎么定义的?贴出来看看,再把FindFileData.cFileName怎么使用的贴出来看看。
wang_quan_li 2008-05-14
  • 打赏
  • 举报
回复
说明:我的PB10
FUNCTION ulong FindFirstFile(ref string lpFileName,ref s_FIND_DATA lpFindFileData) LIBRARY "kernel32.dll" ALIAS FOR "FindFirstFileA;Ansi" //
FUNCTION ulong FindNextFile(ulong hFindFile,ref s_FIND_DATA lpFindFileData) LIBRARY "kernel32.dll" ALIAS FOR "FindNextFileA;Ansi" //

long hfind
WIN32_FIND_DATA FindFileData;
hfind = FindFirstFileA(filepath + '*.*', FindFileData);
messagebox("",findfiledata.cfilename)
if (hFind = -1 ) then
messagebox("警告","服务器路径错误,请联系管理员!!")
return -2
else
do while (FindNextFile(hFind, FindFileData) <> 0)
messagebox("",findfiledata.cfilename)
loop
end if
问题依旧 中文乱码,英文正常
eviler 2008-05-14
  • 打赏
  • 举报
回复
long hfind
WIN32_FIND_DATA FindFileData;
hfind = FindFirstFileA(filepath + '*.*', FindFileData);
messagebox("",findfiledata.cfilename)
if (hFind = -1 ) then
messagebox("警告","服务器路径错误,请联系管理员!!")
return -2
else
do while (FindNextFile(hFind, FindFileData) <> 0)
messagebox("",findfiledata.cfilename)
loop
end if

我的么有这个问题,一切正常
wang_quan_li 2008-05-14
  • 打赏
  • 举报
回复
定义代码
global type s_find_data from structure
unsignedlong att
s_filetime c_time
s_filetime a_time
s_filetime w_time
unsignedlong h_size
unsignedlong l_size
unsignedlong dwreserved0
unsignedlong dwreserved1
character cfilename[260]
character calternatefilename[16]
end type
使用代码
long i,j,k
s_find_data lss_temp
//lss_temp.cfilename=space(260)
string ls_swap
k=upperbound(as_file) + 1

if mid(as_dir_name,len(as_dir_name))<>"\" then
as_dir_name=as_dir_name+"\"
end if
ls_swap=as_dir_name+"*"

//messagebox("",as_dir_name)
i=findfirstfile(ls_swap,lss_temp)
if i= - 1 then
return -1
end if
j=i
do while j<>0
if lss_temp.cfilename='.' or lss_temp.cfilename=".." or len(trim(lss_temp.cfilename))=0 then
else
as_file[k]=lss_temp
as_file[k].cfilename=as_dir_name+as_file[k].cfilename
k++
end if
j=findnextfile(i,lss_temp)
// messagebox(string(k - 1),as_file[k - 1].cfilename)
loop
findclose(i)
return k - 1

wang_quan_li 2008-05-13
  • 打赏
  • 举报
回复
英文的没问题
对 是字符问题 怎么解决啊
a123lm 2008-05-13
  • 打赏
  • 举报
回复
用英文的 看看行不行

貌似字符问题

wang_quan_li 2008-05-13
  • 打赏
  • 举报
回复
是直接 messagebox() 的
一取出来就messagebox 也不合适
wang_quan_li 2008-05-13
  • 打赏
  • 举报
回复
PB9合适
eviler 2008-05-13
  • 打赏
  • 举报
回复
是直接 messagebox() 的吗?

是直接使用的 FindFileData.cFileName 这个属性吗

你直接messagebox 出来看看,一取出来就messagebox 看是不是正确
eviler 2008-05-13
  • 打赏
  • 举报
回复
9 呢

680

社区成员

发帖
与我相关
我的任务
社区描述
PowerBuilder API 调用
社区管理员
  • API 调用社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧