[Winform]文件操作.之.如何修改文件的短文件名(8.3格式)流程说明:首先在D:根目录下建立: 测试文件示例.txt
[Winform]文件操作.之.如何修改文件的短文件名(8.3格式)
流程说明:
首先在D:根目录下建立: 测试文件示例.txt
接着在开始->运行输入: cmd
BatchFile codeC:\> 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# codethrow new NotImplementedException()
[解决办法]
这题比较狠
[解决办法]
up
[解决办法]
接分!
[解决办法]
这个问题在FAT32(包括FAT16)中用C#应该是不可能实现的...因为只能通过改写FAT中的文件名实现...而直接操作FAT需要取得系统的0环控制权...据我所知得写底层驱动才行...当然我是菜鸟孤陋寡闻也不一定...
至于原因...去了解一下文件系统知识就知道了...FAT32和FAT16都将文件名存储于FAT...不同的是FAT32还有一个长文件名存储区...而NTFS和FAT的原理不同可以存储附加的文件信息...
8.3短文件名对NTFS来说只是一个附加信息仅仅用于兼容部分旧应用程序...而对FAT32来说则必须遵从标准以兼容旧操作系统...为了防止短文件名重名没有提供重命名短文件名的方法...是由操作系统控制的...
至于那些能够修改短文件名的软件应该是通过底层驱动实现的...C++的作品...