|
|
|
|
|
|
o**o 发帖数: 3964 | 1 一直想写个小程序自动把GB2312(和GBK)的文件名改成UNICODE的。主要原因是手头还有
不少国内得到的mp3和其他文件,它们的文件名多半是GB2312编码的,少数是扩展集GBK
。这些文件在WINNT以后的NTFS系统里可以用,但文件名在英文windows里是乱码 -- 除
非把系统locale改到PRC。昨天终于偷空用perl写了个小程序自动识别GB/GBK文件名,
然后转成对应的UNICODE。基本上是调用win32:api新开个UNICODE文件名的文件,然后
把ANSI文件名的文件binary copy过去,效率之低可想而知,而且这样也不方便同时改
path上的目录名,因为要递归地在另一个地方重建目录树。
麻烦熟悉WIN32 API的大侠能解释一下在XP/Vista/7里面修改文件名是怎么实现的?比
如单键点击一个乱码的文件名,然后在in-place editor框里面可以输入中文名,然后
这个中文文件名就能正确显示。这个似乎不是用MoveFile()或者MoveFileW()实现的,
因为这两个函数要求in/out的编码同为ANSI或者同为UNICODE。有什么办法能 | p***o 发帖数: 1252 | 2
GBK
Sounds like a Shell function. Probably SHFileOperation.
【在 o**o 的大作中提到】 : 一直想写个小程序自动把GB2312(和GBK)的文件名改成UNICODE的。主要原因是手头还有 : 不少国内得到的mp3和其他文件,它们的文件名多半是GB2312编码的,少数是扩展集GBK : 。这些文件在WINNT以后的NTFS系统里可以用,但文件名在英文windows里是乱码 -- 除 : 非把系统locale改到PRC。昨天终于偷空用perl写了个小程序自动识别GB/GBK文件名, : 然后转成对应的UNICODE。基本上是调用win32:api新开个UNICODE文件名的文件,然后 : 把ANSI文件名的文件binary copy过去,效率之低可想而知,而且这样也不方便同时改 : path上的目录名,因为要递归地在另一个地方重建目录树。 : 麻烦熟悉WIN32 API的大侠能解释一下在XP/Vista/7里面修改文件名是怎么实现的?比 : 如单键点击一个乱码的文件名,然后在in-place editor框里面可以输入中文名,然后 : 这个中文文件名就能正确显示。这个似乎不是用MoveFile()或者MoveFileW()实现的,
| o**o 发帖数: 3964 | 3 对我是想知道这个shell operation底层的实现。刚才google到一个通过handle改file
info的函数SetFileInformationByHandle(). 也许这个行 |
|
|
|
|
|