2012-11-07 15 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 पर होवर करें, विजुअल स्टूडियो IntelliSense मुझे दिखाता है RigInfo{string[30]}। अब, मैंने हमेशा समझा है कि = new string[9] 9 तत्व सरणी बनाएगा। तो 30 तत्वों की अनुमति क्यों है? जब मैं प्रोग्राम चलाता हूं, तो मुझे इस सरणी में आने पर कोई त्रुटि या कुछ भी नहीं मिलता है। तथ्य की बात यह है कि यह काम करता है जिस तरह से मुझे चीजों की समग्र योजना में इसकी आवश्यकता होती है। यह समझने में किसी भी और सभी मदद के लिए धन्यवाद कि यह कैसे और क्यों है। बेहतर दृश्य सहायता के लिए स्क्रीनशॉट भी संलग्न है।

Confusing intellisense

+1

मैं जानता हूँ कि इस का उत्तर नहीं है आपका quesiton, लेकिन चूंकि आप .NET में हैं, तो आप .ini फ़ाइलों का उपयोग क्यों करेंगे? App.Config (या web.config अगर यह एक एएसपी.नेट साइट है) का उपयोग कर रहा है और सिस्टम का उपयोग कर मूल्यों को बाहर निकालना है। कॉन्फ़िगरेशन। कॉन्फ़िगरेशन प्रबंधक *** बहुत आसान है ***, और यह "द।" है।एनईटी रास्ता "ऐसी चीजों को करने के लिए। Http://msdn.microsoft.com/en-us/library/system.configuration.configurationmanager.aspx – David

+0

मेरा प्रोग्राम एक आईबीआई फ़ाइल का उपयोग करता है जिसे वीबी 6 प्रोग्राम द्वारा बनाया और उपयोग किया जाता है। – MyCodeSucks

+0

गोटो! मान्य उनका उपयोग करने के लिए मामला। कोई अपराध नहीं, मैं बस पूछ रहा था। – David

उत्तर

5
यहाँ

:

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

आप एक नया मूल्य के साथ चर .. इस मामले में एक नया स्ट्रिंग [] बताए जाते हैं।

+0

इसे उत्तर के रूप में स्वीकार किया गया। इस तथ्य के बावजूद कि सभी 8 उत्तरों अनिवार्य रूप से एक ही बात है, यह था सूची में सबसे ऊपर "सबसे पुराना" है। – MyCodeSucks

4

क्योंकि आप संदर्भ है कि इस पंक्ति में अपने चर में संग्रहीत किया जाता बदल गए हैं:

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

RigInfo = File.ReadAllLines(fileLocation[1] + "\\hddrigsite.ini"); करके, आप एक new array आकार 30 की File.ReadAllLines(fileLocation[1] + "\\hddrigsite.ini"); से RigInfo चर के परिणामस्वरूप बताए जाते हैं।

आप

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

करते हैं तो यह रूप में आप पहले से सरणी को परिभाषित का उपयोग कर रहे 9 तत्व के बाद असफल हो जायेगी।

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

जितना अधिक पूछताछकर्ता उस के बारे में उत्सुक हो सकता है, वह एक अलग सरणी –

+0

के बारे में पूछ रहा था असल में, मैं इस विशेष सरणी के बारे में उलझन में नहीं था , लेकिन अब मैं देख सकता हूं कि यह एक ही अवधारणा का पालन करेगा। हालांकि, मुझे पता है कि फ़ाइल स्थान केवल 2 तत्व होंगे। – MyCodeSucks

+0

@ सैमआईम मैंने RingInfo के साथ अपडेट किया। समान तर्क फ़ाइलएल के साथ चला जाता है ocation व्यवहार्य। –

3

तुमने किया क्या आप है । आप मूल रूप से अपने पिछले असाइनमेंट को ओवरराइट करते हैं।

1

पर एक पूरी तरह से नई सरणी के साथ अपने 9-तत्व सरणी पर लिखा था कि आपके पास इसका File.ReadAllLines असाइन करते हैं, तो नया स्मृति आवंटित किया जाएगा और सरणी एक पूरी नई सरणी है

2

एरे रीडअलाइनलाइन कॉल द्वारा 'पुनः परिभाषित' है। यदि आपने इंडेक्स द्वारा सरणी में प्रत्येक पंक्ति को असाइन किया था तो आपको एक त्रुटि मिल जाएगी, लेकिन इस मामले में, आपने अपने पॉइंटर को अपनी सरणी में आवंटित स्मृति से रीडायरेक्ट किया है, और इसे ReadAllLines विधि के आउटपुट पर इंगित किया है।

हमेशा Arr = somthing से थके रहें, क्योंकि इससे सरणी संदर्भ स्वयं बदल जाएगा।

1

RigInfo क्योंकि इस लाइन की उम्मीद 9 तत्वों की तुलना में अधिक शामिल हैं:

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

मूल RigInfo को छोड़ देता है और File.ReadAllLines के परिणामों के साथ एक नई स्ट्रिंग सरणी बनाता है (fileLocation [1] + "\ hddrigsite.ini")

संबंधित मुद्दे