2016-04-15 60 views
0

這是一個奇怪的。File.Exists拋出System.IndexOutOfRangeException

每當試圖訪問我的程序的某個區域中的文件(如果確定該文件是否存在,嵌套在一個文件中),它會拋出一個System.IndexOutOfRangeExceptionFile.Exists甚至不應該拋出!這是我的腳本。

if (Directory.Exists("SA_Data") && File.Exists("SA_Data/stock_names.txt")) 
{ 
    Array.Clear(Globals.stocks, 0, Globals.stocks.Length); 
    Globals.stocks[1] = "empty"; 

    // ********************************************** 
    // This should return true. It raises an exception 
    bool whatever = File.Exists("SA_Data/stock_names.txt"); 
    // ********************************************** 

    // I get the same exception in File.ReadAllLines, below 
    foreach (string stock in File.ReadAllLines("SA_Data/stock_names.txt")) 
    { 
     MessageBox.Show(stock); 
     if(Globals.stocks[1] != "empty") 
     { 
      Array.Resize(ref Globals.stocks, Globals.stocks.Length); 
      Globals.stocks[Globals.stocks.Length - 1] = stock; 
     } 
     else 
     { 
      Globals.stocks[0] = stock; 
     } 
    } 
} 

該文件存在,不爲空,未打開並且具有適當的權限被打開。這是怎麼回事?

感謝, -Dylan

+0

你在哪裏得到該錯誤拋出? – Ian

+1

文件位於何處?路徑似乎不正確。對於一個使用完全限定的path.File.Exists(@「c:\ SA_data \ stock_names.txt」)。您還正在使用正斜槓? –

+1

我看不到任何可以創建indexOutOfRangeException的原因,如果路徑包含任何無效字符(因此路徑不能發出),它將返回false。 @AlgoRythm可以嘗試重新執行沒有任何數組的「Globals.stocks [1]」 –

回答

0

數組大小調整隻是不是那種你應該做普通的事。所以,這裏是我會建議,而不是:

if (Directory.Exists("SA_Data") && File.Exists("SA_Data/stock_names.txt")) 
{ 
    var stocks = new List<string>(); 

    foreach (string stock in File.ReadAllLines("SA_Data/stock_names.txt")) 
    { 
     MessageBox.Show(stock); 
     stocks.Add(stock); 
    } 
    Global.stocks = stocks.ToArray(); 
} 
+0

太棒了,非常感謝你:) – AlgoRythm