首页 诗词 字典 板报 句子 名言 友答 励志 学校 网站地图
当前位置: 首页 > 教程频道 > .NET > C# >

[Winform]文件操作.之.怎么修改文件的短文件名(8.3格式)

2012-01-13 
[Winform]文件操作.之.如何修改文件的短文件名(8.3格式)流程说明:首先在D:根目录下建立: 测试文件示例.txt

[Winform]文件操作.之.如何修改文件的短文件名(8.3格式)
流程说明:

首先在D:根目录下建立: 测试文件示例.txt

接着在开始->运行输入: cmd

BatchFile code
C:\> D:D:\> dir /x


然后在输出的文件清单当中你会看到: 测试文件示例.txt 前面系统会自动生成一(8.3)格式的短文件名: 测试文~1.TXT

我的目的是想将 测试文~1.TXT 修改成 TEST~1.TXT(自定义)

最后在程序中直接使用 d:\TEST~1.TXT 访问 测试文件示例.txt

希望大家帮帮忙..

哭诉一下: kernel32.dll 提供了相应的 API.GetShortPathName 获取短文件名, 却没有对应的 SetShortPathName 修改短文件名...

发贴告示:

由于 Ivony 推行的新政策, 可能这是最后一次在C#版块散分, 为了庆祝升星(秘密散分) 冒险也要散一散喔...

要散就散个好意头, 178(一起发) ...

^ō^

[解决办法]
sf
[解决办法]
我接分了
[解决办法]
秘密接分。
[解决办法]
前10.
[解决办法]
偷偷接点分······
[解决办法]
mark
[解决办法]
先接分,后研究问题.
[解决办法]
mark and up
[解决办法]
我看你这个要申请很难……

因为据我所知你的问题是不可能解决的。

那么不可能解决的话,自然就不会有完整的解决方案……灭哈哈哈……
[解决办法]
短文件名的设置应该是系统的工作吧。
为什么一定要设置呢?反正长文件名与短文件名之间是可以转换的
[解决办法]
秘密顶楼主一次,不要说啊~呵呵
[解决办法]
mark
[解决办法]
试着多加个引号试一下.
[解决办法]
......
[解决办法]
建个对应关系表吧:-)
[解决办法]
00
[解决办法]
很好,很强大
[解决办法]
Mission Impossible


UP
[解决办法]
基本很难,你见过有其他软件实现没?
[解决办法]
对照?
[解决办法]
关注一下
[解决办法]
顶吧
[解决办法]
关注一下
[解决办法]
这厮太烦了,哪里都能看见这广告……
[解决办法]
直接用win32估计没戏
研究一下文件目录表FDT 尤其是FAT32和ntfs的


[解决办法]
windows应该没有提供接口,端文件名一般时在需要时,现计算的。
应该可以直接修改文件系统fat,和ntfs中相应的域,可能比较难
------解决方案--------------------


以前DELPHI项目中做过,用到
GetShortPathName API。
The GetShortPathName function obtains the short path form of a specified input path. 

DWORD GetShortPathName(
LPCTSTR lpszLongPath, // pointer to a null-terminated path string
LPTSTR lpszShortPath, // pointer to a buffer to receive the 
// null-terminated short form of the path
DWORD cchBuffer // specifies the size of the buffer pointed 
// to by lpszShortPath
);

当时的代码:

 //长文件名转换为短文件名
function LongNameToShort(sLong: string): string;
var
iLen: integer;
begin
Result := sLong;
//GetMem(p, Max_Path);
try
try
iLen := GetShortPathName(pchar(sLong), p, Max_Path);
if iLen > 0 then
begin
SetLength(Result, iLen);
Move(p^, Result[1], iLen);
end
else
Result := sLong;
except
Result := sLong;
end;
finally
//Freemem(p);
end;
end;
[解决办法]
....
[解决办法]
...
[解决办法]
...
[解决办法]
帮顶.
[解决办法]
为什么要这么做,不明白
需求是否可以变通呢?


[解决办法]
没见过...


[解决办法]

C# code
throw new NotImplementedException()
[解决办法]
这题比较狠
[解决办法]
up
[解决办法]
接分!
[解决办法]
这个问题在FAT32(包括FAT16)中用C#应该是不可能实现的...因为只能通过改写FAT中的文件名实现...而直接操作FAT需要取得系统的0环控制权...据我所知得写底层驱动才行...当然我是菜鸟孤陋寡闻也不一定...

至于原因...去了解一下文件系统知识就知道了...FAT32和FAT16都将文件名存储于FAT...不同的是FAT32还有一个长文件名存储区...而NTFS和FAT的原理不同可以存储附加的文件信息...

8.3短文件名对NTFS来说只是一个附加信息仅仅用于兼容部分旧应用程序...而对FAT32来说则必须遵从标准以兼容旧操作系统...为了防止短文件名重名没有提供重命名短文件名的方法...是由操作系统控制的...

至于那些能够修改短文件名的软件应该是通过底层驱动实现的...C++的作品...

热点排行