【发布时间】:2017-01-04 21:53:04
【问题描述】:
我创建了一个可执行文件,我想将任意数量的文件拖到其中。我希望它删除所有这些文件的前 15 个字符。它正在重命名许多文件,但之后会引发错误。
“未处理的异常:System.IndexOutOfRangeException:索引超出了数组的范围。在 RemoveTimeStampMultipleFiles.Program.Main(String[] args)”
当我拖动 2 个文件时,它会在寻找第三个吗?
还有没有办法允许无限文件而不是最多 99 个文件?
using System;
using System.IO;
namespace RenameVersion2
{
class Program
{
static void Main(string[] args)
{
if (args.Length == 0)
return; // return if no file was dragged onto exe
for (int i = 0; i < 99; i++)
{
if (args[i].Length == 0)
System.Environment.Exit(0);
string MyString = Path.GetFileNameWithoutExtension(args[i]);
String NewFileName = MyString.Remove(0, 15);
string path = Path.GetDirectoryName(args[i])
+ Path.DirectorySeparatorChar
+ MyString
+ Path.GetExtension(args[i]);
string newPath = Path.GetDirectoryName(args[i])
+ Path.DirectorySeparatorChar
+ NewFileName
+ Path.GetExtension(args[i]);
File.Move(path, newPath);
}
System.Environment.Exit(0);
}
}
}
【问题讨论】:
-
只需使用
foreach循环,因为您想获取集合中的所有项目。也没有理由在程序结束时有Environment.Exit,程序已经结束了。 -
对于所有作为 args 传递的文件(假设您只有文件名作为 args),只需使用
foreach(var arg in args),并将args[i]调用替换为arg。至于异常,您是否尝试过调试?当您的文件名长度少于 15 个字符时会发生什么? -
@Kolichikov 有
foreach的正确解决方案,但至少你应该使用for(i = 0; i < args.Length; i++)。您已经知道args.Length,因为您在上面使用过它;你到底为什么要硬编码高值 99?如果是args.Length == 3,那么在您测试args[i].Length == 0和i == 3的那一刻,您就已经过了args的末尾。
标签: c# visual-studio executable