2012-11-07 27 views
5

所以,我有了這個功能,從INI文件讀取:爲什麼數組比我定義的元素多?

private void GetRigInfo() 
{ 
    RigInfo = new string[9]; 
    var fileLocation = new string[2]; 

    // The problem is that there's no telling where the hddrigsite.ini will be 
    stored. So, we have to find out where it is from the hddconfig.ini. 
    Log("Locating rig info"); 

    // There's no telling if this will be on a 32 or 64 bit OS. Check for both 
    var rigInfoLocation = File.ReadAllLines(Environment.Is64BitOperatingSystem ? 
          @"C:\Program Files (x86)\HDD DrillView\hddconfig.ini" : 
          @"C:\Program Files\HDD DrillView\hddconfig.ini"); 

    // This should get us the location of the rigsite info we need. 
    foreach (var s in rigInfoLocation.Where(s => s.Contains("data_dir"))) 
    { 
     fileLocation = s.Split('='); 
    } 

    RigInfo = File.ReadAllLines(fileLocation[1] + "\\hddrigsite.ini"); 

    Log("Rig info found"); 
} 

現在,當我步,並獲得在函數的最後Log(),我將鼠標懸停在RigInfo,Visual Studio的智能感知給我看RigInfo{string[30]}。現在,我一直都明白= new string[9]會創建一個9元素的數組。那爲什麼它允許有30個元素?當我運行程序時,當涉及到這個數組時,我不會遇到任何錯誤或任何其他問題。事實上,它的工作方式正是我在整體事物方案中所需要的。感謝您幫助理解這是如何以及爲何如此。還附加截圖以獲得更好的視覺幫助。

Confusing intellisense

+1

我知道這不是一個答案你的問題,但是因爲你在.NET中,你爲什麼要使用.ini文件?使用App.Config(或web.config,如果它是一個ASP.NET站點)並使用System.Configuration.ConfigurationManager提取值是***非常容易***,它是「。NET方式「來執行此操作。http://msdn.microsoft.com/en-us/library/system.configuration.configurationmanager.aspx – David

+0

我的程序訪問由VB6程序創建和使用的INI文件。 – MyCodeSucks

+0

Gotcha!Valid如果沒有冒犯,我只是問。 – David

回答

5

這裏:

RigInfo = File.ReadAllLines(fileLocation[1] + "\\hddrigsite.ini"); 

您分配一個新的值的變量。在這種情況下,一個新的String []。

+0

接受這個答案。儘管所有8個答案都基本上是一樣的事實,這是那個在列表頂部的是「最老的」 – MyCodeSucks

4

因爲你已經改變了存儲在您的變量在此行中的參考:

RigInfo = File.ReadAllLines(fileLocation[1] + "\\hddrigsite.ini"); 
0

通過RigInfo = File.ReadAllLines(fileLocation[1] + "\\hddrigsite.ini");,您正在分配new array從大小30File.ReadAllLines(fileLocation[1] + "\\hddrigsite.ini");導致到RigInfo變量。

如果你

RigInfo [indx++] = one line at a time 

那麼它將作爲您使用的是以前定義數組元素9日之後失效。

+0

儘管提問者可能會對那個問題感到好奇,但他詢問的是另一個陣列 –

+0

實際上,我對這個特定數組並沒有感到困惑,但我現在可以看到它將遵循相同的概念,但是,我知道fileLocation將只有2個元素。 – MyCodeSucks

+0

@SamIam我更新了RingInfo。可變的。 –

3

你做什麼,你有一個全新的陣列上寫了你的9個元素的數組上

RigInfo = File.ReadAllLines(fileLocation[1] + "\\hddrigsite.ini"); 
1

分配File.ReadAllLines它,所以新的內存將被分配和數組是一個全新的數組。你基本上覆蓋了你以前的任務。

2

數組由'ReadAllLines'調用'重新定義'。如果你已經通過索引將每一行分配給數組,那麼你會得到一個錯誤,但是在這種情況下,你將指針從分配給你的數組的內存中重定向,並指向ReadAllLines方法的輸出。

總是厭倦了Arr = somthing,因爲這會改變數組引用本身。

1

RigInfo包含比預料的,因爲這條線的9個元素更多:

RigInfo = File.ReadAllLines(fileLocation [1] + 「\ hddrigsite.ini」);

丟棄原始RigInfo並創建File.ReadAllLines的結果的字符串數組(fileLocation [1] + 「\ hddrigsite.ini」)

相關問題