2017-01-04 67 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++)