2009-09-09 14 views
6

मुझे लगता है कि यह प्रश्न आप में से अधिकांश के लिए छोटा हो सकता है लेकिन किसी भी तरह से मुझे जवाब नहीं मिल रहा है ... इसलिए, मेरे पास विजुअल स्टूडियो 2008 समाधान फू और इस समाधान में एक प्रोजेक्ट बार है। मेरे बार-परियोजना में मैं एक निर्देशिका कहा जाता baz मिल गया है, यह इस तरह दिखता है:सी # उद्घाटन फ़ाइल समाधान में

foo dir 
| 
+-> bar dir 
     | 
     +-> baz dir 
      | 
      +-> asd file 

अब मैं बार-परियोजना में मेरे "asd फ़ाइल" खोलना चाहते हैं लेकिन सटीक पथ के लिए "asd फ़ाइल" की जरूरत है , मुझे ये कैसे मिल सकता है? मैंने बस "बाज़ \ asd" की कोशिश की लेकिन यह काम नहीं करता है।

धन्यवाद!

जम्मू

उत्तर

2

आप रनटाइम पर खुला मतलब है, तो प्रोग्राम वास्तव में बार \ बिन \ डिबग (या बार \ बिन \ विज्ञप्ति) में चलता है, ताकि आप उस के लिए खाते में करने की जरूरत है।

#if DEBUG 
filename = @"..\..\baz\asd"; 
#else 
filename = @"baz\asd"; 
#endif 
+0

यह दृश्य स्टूडियो के बाहर काम नहीं करेगा अगर फ़ाइल आउटपुट निर्देशिका में प्रतिलिपि नहीं है। – user7116

+0

रिलीज़ मोड के लिए, मेरे संस्थापक प्रतियां फ़ाइलें है कि कार्यक्रम की जरूरत के सभी। मैं अंतर्निहित इंस्टॉलर का उपयोग नहीं करता (मैं एनएसआईएस का उपयोग करता हूं)। क्या उसे फ़ाइल को उठाए जाने के लिए सामग्री के रूप में चिह्नित करने की आवश्यकता है? –

+0

हाँ, संस्थापक उन्हें सामग्री के रूप में और कॉपी किया जाना चाहिए। – user7116

9

आप एक सी # आवेदन में कार्यावधि में bar -Project में फ़ाइल खोलने के लिए चाहते हैं:

आमतौर पर मैं कुछ ऐसा करेंगे? इसे पूरा करने के कुछ तरीके हैं, और मैं आपको सबसे आसान दूंगा।

  1. जाओ समाधान Explorer में asd के लिए गुण को
  2. सेट कार्रवाई बिल्डContent को
  3. सेट कॉपी आउटपुट निर्देशिका के लिए रूप Copy always (या Copy if newer)

आप टी कर सकते हैं मुर्गी फ़ाइल का संदर्भ अपने सी # में इस प्रकार है (यह मानते हुए अपने कार्यक्रम निष्पादन निर्देशिका से दूर वर्तमान कार्यशील निर्देशिका परिवर्तन नहीं करता है):

using (StreamReader reader = new StreamReader(@"baz\asd")) 
{ 
    // ... 
} 

अन्य तरीकों using embedded resources शामिल है, जो समाधान के सबसे संक्षिप्त नहीं है ।

+0

उत्पादन निर्देशिका के लिए इस प्रकार की फ़ाइल प्रतिलिपि बनाई जा रही डिस्क पर दो प्रतियों के साथ आप छोड़ देता है। यह ठीक है अगर फाइलें छोटी हैं और कुछ हैं। –

+1

मैं सहमत हूं, लेकिन यह सबसे आसान है। भले ही, डिस्क पर इसे छोड़ने के बजाय संसाधन को एम्बेड करना अभी भी स्थान लेता है। – user7116

+1

मैं नकल नहीं है या एम्बेड जबकि डीबगिंग, सिर्फ फाइलों कि वे कहाँ हैं छोड़ दें। रिलीज बिल्ड के लिए, मेरा इंस्टॉलर (मैं एनएसआईएस का उपयोग करता हूं) लक्ष्य मशीन पर आवश्यक फाइलों को स्थापित करने के लिए ज़िम्मेदार है। –

2

फ़ाइल का सापेक्ष स्थान समाधान डीआईआर है।

>open bar\baz\asd 

आप रनटाइम पर यह करने के लिए चाहते हैं, आप की जरूरत है: तो, वी.एस. आईडीई में खोलने के लिए, आप में आदेश खिड़की या खोज पाठ बॉक्स स्टैंडर्ड उपकरण पट्टी पर (Ctrl-D) टाइप कर सकते हैं स्रोत फ़ाइलों को अपने एप्लिकेशन के साथ वितरित करें, क्योंकि कुछ भी गारंटी नहीं देता है कि यह समाधान पेड़ के पास कहीं भी निष्पादित होगा।

यदि आप इसे वीएस एड-इन से करना चाहते हैं, तो मुझे यकीन है कि समाधान का प्रतिनिधित्व करने वाली कक्षा है, जिसका उपयोग आप इसके भीतर की परियोजनाओं को गिनने के लिए कर सकते हैं और फिर बार प्रोजेक्ट में फ़ाइल प्रविष्टियों का आकलन कर सकते हैं।

0

बिल्ड फ़ाइल में एक सरल लक्ष्य जोड़ना बेहतर हो सकता है (प्रोजेक्ट फ़ाइल - सी # के लिए csproj)।पाठ मोड और में खोलें csproj फ़ाइल जोड़ें:


< लक्ष्य का नाम = "AfterBuild" > < कॉपी SourceFiles = "<SourceFileLocationRelativeToPrjFile> \ <SourceFileName>" DestinationFiles = "<SourceFileName>" />
</लक्ष्य >

एमएस बिल्ड आपकी फ़ाइल को सही जगह पर कॉपी करने का ख्याल रखेगा - यह सही फ़ोल्डर है चाहे आपका कॉन्फ़िगरेशन (डीबग/रिलीज़) क्या हो।

तुम भी प्रकाशन में रुचि रखते हैं, तो आप एक अतिरिक्त प्रयास करने की आवश्यकता होगी, लेकिन मुझे लगता है कि आपको अभी के लिए नहीं कह रहे हैं - हां, तो यह सरल रखना होगा।

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