C#批量修改文件名,新文件名过长无法修改

我用C# 的System.IO.File.move(oldFile,newFile)来修改文件名,可是当newFile(新的文件名)长一点就会修改失败(例如:“加州《科学》二年级动画歌曲02 song_backbones”这个文件名就不成功)。如果是在文件上重命名就可以,程序就不行,这个如何解决?请教高手!
private void button3_Click(object sender, EventArgs e)
{
int num = 0;//初始化记录数
string fName;//旧文件绝对路径
string newName;//新文件绝对路径
string type; //文件后缀名
//遍历数据表
for (int i = 0; i < dataGridView1.Rows.Count-1; i++)
{
fName = textBox1.Text.Trim() + "\\" + Convert.ToString(dataGridView1.Rows[i].Cells[1].Value) + "\\" + Convert.ToString(dataGridView1.Rows[i].Cells[2].Value);//旧文件绝对路径赋值
type = fName.Substring(fName.LastIndexOf(".") + 1);//获取后缀名
//新文件完整路径
newName = textBox1.Text.Trim() + "\\" + Convert.ToString(dataGridView1.Rows[i].Cells[1].Value) + "\\" + dataGridView1.Rows[i].Cells[0].Value.ToString().Trim() + "." + type;
try
{
System.IO.File.Move(fName, newName); //创建新的文件,并赋予新的文件名
this.dataGridView1.Rows[i].Cells[3].Value = "成功";
}
catch (Exception)
{
this.dataGridView1.Rows[i].Cells[3].Value = "失败";
continue;
}
}
260个字符应该挺长的
string fName;//旧文件绝对路径
string newName;//新文件绝对路径
fName = "G:\\book\\b\\01037.swf";
newName = "G:\\book\\b\\第一册第二章1节:准备题.swf";
try
{ System.IO.File.Move(fName, newName);}
catch (Exception)
{ throw;}
但是这个还是会跳到catch中去,为什么?难道还要转编码格式?这个怎么转?

第1个回答  2013-08-12
文件名长度有限制的
例如,在基于 Windows 的平台上,路径必须小于 248 个字符,文件名必须小于 260 个字符追问

有可能修改这个长度限制吗?或者别的方法来容纳这个新的文件名的修改。

追答

你例子里的文件名长度是可以的 ‘
可能是路径长度问题

也可能是中文编码问题 中文一旦乱码长度会变得很长

追问

就算新文件是newName = "G:\\book\\b\\第一册第二章1节:准备题.swf"这个路径也不行,难道还要转编码格式?这个怎么转?

本回答被提问者采纳
第2个回答  2013-08-12
在windows系统中,好像文件的 文件路径+文件名+文件扩展名的总长度不能超过260个字符吧。
第3个回答  2013-08-12
既然是重命名文件,与dataGridView1有何关系?你最好做一个函数ReName(string src,string des),并附带几个测试用例,那样回答的人才好给你测试。
相似回答