2017-01-04 71 views
-1

我制作了一个可执行文件,其中我想将任意数量的文件拖放到上面。我希望它删除所有这些文件的前15个字符。它正在根据需要重新命名大量文件,但之后会引发错误。将多个文件拖放到可执行文件C上#

“Unhandeled异常:System.IndexOutOfRangeException:指数阵列的边界之外在RemoveTimeStampMultipleFiles.Program.Main(字串[] 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); 
     } 
    } 
} 
+1

只需使用一个'foreach'循环,因为你想获得的所有集合中的项目。程序结束时也没有任何理由拥有'Environment.Exit',程序已经结束。 – Servy

+0

对于作为args传递的所有文件(假设你只有文件名作为参数),只需使用'foreach(arg in args)',并用'arg'替换'args [i]'调用。至于例外情况,你是否尝试过调试?当您的文件名少于15个字符时会发生什么? – Kolichikov

+3

@Kolichikov对'foreach'有正确的解决方案,但至少应该使用'for(i = 0; i

回答

3

应用程序将出现,因为你i回路从0到98,因为处理然而,许多参数传递后,它试图前进到下一个是不是有你出现错误时准确地预计99论据。试试这个:

using System; 
using System.IO; 

namespace RenameVersion2 
{ 
    class Program 
    { 
     static void Main(string[] args) 
     { 
      foreach (var arg in args) 
      { 
       if (arg.Length == 0) 
        System.Environment.Exit(0); 

       string MyString = Path.GetFileNameWithoutExtension(arg); 
       String NewFileName = MyString.Remove(0, 15); 


       string path = Path.GetDirectoryName(arg) 
        + Path.DirectorySeparatorChar 
        + MyString 
        + Path.GetExtension(arg); 

       string newPath = Path.GetDirectoryName(arg) 
        + Path.DirectorySeparatorChar 
        + NewFileName 
        + Path.GetExtension(arg); 


       File.Move(path, newPath); 
      } 


     } 
    } 
} 
1

您需要修复您的for-loop,以便它遍历可用的索引而不是超出范围。

for (int i = 0; i < args.Length; 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); 
      } 

这里的区别是

for (int i = 0; i < args.Length; i++) 

VS

for (int i = 0; i < 99; i++)