返回信息流windows API不行,因为需要文件存在,而我是要把一个非系统中的长文件名转换成短文件名,最好是unicode版的
这是一条镜像帖。来源:北邮人论坛 / soft-design / #20979同步于 2007/9/10
该镜像源已超过 30 天没有更新,可能在源站已被删除。
SoftDesign机器人发帖
有谁有长文件名转换8.3文件名的代码?
Wing
2007/9/10镜像同步3 回复
订阅后,新回复会通过你的通知中心匿名送达。
3 条回复
如果本地没有这个文件那就本地建立一个空文件。。。用完删掉。。。-_,-
unicode调用就是改几个东西。。。
wchar_t st1[MAX_PATH]=L"aaaaaaaaaaaaa.bbbnn";
wchar_t st2[MAX_PATH];
int length;
FILE * fp;
fp=_wfopen(st1,L"w");
length=GetShortPathNameW(st1,st2,MAX_PATH);
//length=GetLastError();
fclose(fp);
_wremove(st1);
cout<<length<<endl;
wcout.imbue( locale("chs") ); //如果文件名有中文就加这个吧。。要不然wcout处理到大于255的时候就会停止。。。不会输出中文。。。如果没有中文就不用管了
wcout<<st2<<endl;
随手写的。。。仅供参考。。。-_,-
我来贴一堆kernel32.dll导出的有关Path的API,嘿嘿,从0000008F处开始的是导出函数
前面是导入函数
C:\WINDOWS\system32>pe kernel32.dll | find "Path"
597 RtlGetFullPathName_U
516 RtlDosPathNameToNtPathName_U
572 RtlFormatCurrentUserKeyPath
603 RtlGetLongestNtPathLength
511 RtlDetermineDosPathNameType_U
518 RtlDosSearchPath_Ustr
601 RtlGetLengthWithoutLastFullDosOrNtPathElement
716 RtlNtPathNameToDosPathName
0000008F 00061799 DosPathToSessionPathA
00000090 0002C1E7 DosPathToSessionPathW
00000162 000138FC GetFullPathNameA
00000163 0000B852 GetFullPathNameW
00000171 00068556 GetLongPathNameA
00000172 00013353 GetLongPathNameW
000001AB 00035BB0 GetShortPathNameA
000001AC 0001F26E GetShortPathNameW
000001C9 00035DCA GetTempPathA
000001CA 00030789 GetTempPathW
000001E2 0002E8B2 GetVolumePathNameA
000001E3 0002E61C GetVolumePathNameW
000001E4 0006A0D0 GetVolumePathNamesForVolumeNameA
000001E5 00020D14 GetVolumePathNamesForVolumeNameW
000002C9 000217EA SearchPathA
000002CA 0000E6DC SearchPathW
【 在 CNLAS (Ich gewinne bestimmt……) 的大作中提到: 】
: 如果本地没有这个文件那就本地建立一个空文件。。。用完删掉。。。-_,-
: unicode调用就是改几个东西。。。
: wchar_t st1[MAX_PATH]=L"aaaaaaaaaaaaa.bbbnn";
: ...................
【 在 CNLAS (Ich gewinne bestimmt……) 的大作中提到: 】
: 如果本地没有这个文件那就本地建立一个空文件。。。用完删掉。。。-_,-
: unicode调用就是改几个东西。。。
: wchar_t st1[MAX_PATH]=L"aaaaaaaaaaaaa.bbbnn";
: ...................
看来只能暂时这样用着了,哪天有空了再自己写一个