日期:2014-05-18  浏览次数:20862 次

C#代码改文件名,求指教
由于底层接收端限制文件名长度,所以发端发送文件时就要判断,若文件名超长,就截掉超过的那部分,只保留限制字符内的文件名,也就是改文件名。

限制是128字节(也就是汉字64个,字母或数字128个),包括文件后缀名,我想请问,有没有一种方法可以按限制长度来截取并重命名文件,但不修改文件路径。

------解决方案--------------------
那如果文件路径本身就超过限制了呢?
------解决方案--------------------
改名用FileInfo 的 MoveTo(截取后的文件名)
http://www.cnblogs.com/ylemzhang/archive/2010/10/11/1848120.html
------解决方案--------------------
探讨

改名用FileInfo 的 MoveTo(截取后的文件名)
http://www.cnblogs.com/ylemzhang/archive/2010/10/11/1848120.html

------解决方案--------------------
String[] result = Directory.GetFiles(sourcePath, oldName);

 foreach (String item in result) //foreach用于枚举集合的每个值,item表示当前值 
 {
string endstr = item.ToString().Substring(item.ToString().Length - 6, 6);
File.Move(item, @sourcePath + endstr); //替换文件名
}
原理2楼说的有,这是我们项目里的简单写法。
------解决方案--------------------
这样
C# code
var encoding = Encoding.GetEncoding("GB2312");
var path = "C:\\一一一一一一一一一一一一一一一一一一一一一一一一一一一一一一一一一一一一一一一一一一一一一一一一一一一一一一一一一一一一一一一一一一一一一一一一一.txt";//153
while (encoding.GetByteCount(path) > 128)
{
    var name = Path.GetFileNameWithoutExtension(path);
    path = Path.GetDirectoryName(path) + "\\" + name.Substring(0, name.Length - 1) + Path.GetExtension(path);
}
var bytes = encoding.GetBytes(path);

------解决方案--------------------
稍微修改下
C# code
var encoding = Encoding.GetEncoding("GB2312");
var path = "C:\\a\\一一一一一一一一一一一一一一一一一一一一一一一一一一一一一一一一一一一一一一一一一一一一一一一一一一一一一一一一一一一一一一一一一一一一一一一一一.txt";//153
var np = path;
while (encoding.GetByteCount(np) > 128)
{
    var name = Path.GetFileNameWithoutExtension(np);
    np = Path.GetDirectoryName(np).TrimEnd('\\') + "\\" + name.Substring(0, name.Length - 1) + Path.GetExtension(np);
}
File.Move(path, np);
var bytes = encoding.GetBytes(np);

------解决方案--------------------
这个问题不难吧。先转化成字节,在截取,再转化成字符串。没什么难度吧!