विज़ुअल स्टूडियो में एक फ़ाइल के सापेक्ष पथ कैसे प्राप्त करें?


82

मैं एक छवि फ़ाइल का पथ प्राप्त करने की कोशिश कर रहा हूं, जिसे मैंने विज़ुअल स्टूडियो में समाधान एक्सप्लोरर में जोड़ा था, लेकिन मुझे उस छवि का सापेक्ष पथ नहीं मिल सका। H मेरे प्रोजेक्ट की फाइल संरचना है:

/ BulutDepoProject
    / FolderIcon
        Folder.ico
        Main.cs

मुझे इस तरह की छवि मिल सकती है:

"C:\\Users\\Tolga\\Desktop\\BulutDepo\\BulutDepoProject\\FolderIcon\\Folder.ico" 

लेकिन मुझे इसे कुछ इस तरह से प्राप्त करने में सक्षम होना चाहिए:

"~\\FolderIcon\\Folder.ico"

मुझे लगता है कि मुझे इसका सटीक सिंटैक्स नहीं पता है इसलिए मैं छवि नहीं ला सकता। :(


आपको यह जांच करनी चाहिए => stackoverflow.com/questions/6895457/…
MarcD

जवाबों:


54

जब यह मामला है कि आप किसी भी प्रकार की बाहरी फ़ाइल का उपयोग करना चाहते हैं, तो निश्चित रूप से उन्हें अपनी परियोजना के भीतर एक फ़ोल्डर में रखने का एक तरीका है, लेकिन संसाधनों से उन्हें प्राप्त करने के रूप में मान्य नहीं है। एक नियमित विज़ुअल स्टूडियो प्रोजेक्ट में, आपके पास अनुभाग के Resources.resxतहत एक फ़ाइल होनी चाहिए Properties, यदि नहीं, तो आप आसानी से अपनी खुद की Resource.resxफ़ाइल जोड़ सकते हैं । और इसमें किसी भी प्रकार की फ़ाइल जोड़ें, आप यहाँ अपने प्रोजेक्ट में संसाधन फ़ाइलों को जोड़ने के लिए पूर्वाभ्यास तक पहुँच सकते हैं

आपके प्रोजेक्ट में संसाधन फ़ाइलें होने के बाद, उन्हें कॉल करना इस प्रकार आसान है:

var myIcon = Resources.MyIconFile;

बेशक आपको using Propertiesइस तरह का बयान जोड़ना चाहिए :

using <namespace>.Properties;

4
@ christo8989 ओपी एक छवि फ़ाइल के बारे में है , जो readonlyवैसे भी होने वाली है, इसलिए ....
जेसी चिशोल्म

38

मुझे थोड़ी देर हो गई है, और मुझे यकीन नहीं है कि यह वही है जो आप देख रहे हैं, लेकिन मुझे लगा कि मैं इसे सिर्फ किसी और के उपयोगी होने की स्थिति में जोड़ूंगा।

मान लीजिए कि यह आपकी फ़ाइल संरचना है:

/BulutDepoProject
    /bin
        Main.exe
    /FolderIcon
        Folder.ico
        Main.cs

आपको Main.exeफ़ाइल के सापेक्ष अपना पथ लिखना होगा । तो, आप Folder.icoअपने उपयोग के लिए उपयोग करना चाहते Main.csहैं:

String path = "..\\FolderIcon\\Folder.ico"

यह मेरे लिए काम करने लगा!


1
यह मेरे मामले में एक बेहतर समाधान है क्योंकि फ़ाइल को संदर्भित किया जा रहा है जिसे समाधान में किसी अन्य परियोजना द्वारा प्रबंधित किया गया है। क्या वाक्य रचना भी एक बिंदु का समर्थन नहीं करती है? string path = ".\\FileName.txt"
क्रिस्टोफर जे। अनुग्रह

1
यह एक भयानक समाधान है, इसका उपयोग न करें ... यह केवल "डीबग" परिदृश्य में काम <Project>/Debug करता है, इसलिए आपकी वर्तमान कार्य निर्देशिका इसलिए यह वीएस डीबग वातावरण के लिए काम करती है। लेकिन अगर आप आईडीई से बाहर निकलते हैं ... या एक अलग कार्य निर्देशिका से EXE चलाते हैं, तो यह निश्चित रूप से टूट जाएगा।
तोमर डब्ल्यू

25

"~ \" को छोड़ें:

var path = @"FolderIcon\Folder.ico";

~\फ़ाइल सिस्टम के संदर्भ में कुछ भी मतलब नहीं है। एकमात्र स्थान जो मैंने देखा है कि सही ढंग से उपयोग किया गया एक वेब ऐप है, जहां ASP.NET आवेदन के रूट के लिए पूर्ण पथ के साथ टिल्ड को बदलता है।

आप आमतौर पर मान सकते हैं कि पथ उस फ़ोल्डर के सापेक्ष हैं जहां EXE स्थित है। यह भी सुनिश्चित करें कि दृश्य स्टूडियो में प्रॉपर्टीज टैब में "कंटेंट" और "कॉपी अगर नया" / "कॉपी हमेशा" के रूप में निर्दिष्ट है।


यूनिक्स / लिनक्स में, "~" "होम डायरेक्टरी" का पर्याय है।
Nyerguds

1
@Nyerguds हाँ। हालाँकि, स्लैश गलत तरीका है, और इस प्रश्न को "विज़ुअल स्टूडियो" टैग किया गया है जो वास्तव में लिनक्स के साथ संगत नहीं है, खासकर 2012 में जब यह प्रश्न पोस्ट किया गया था।
3Dave

"आप आमतौर पर मान सकते हैं कि पथ उस फ़ोल्डर के सापेक्ष हैं जहां EXE स्थित है" << बहुत सच नहीं है! जब आप विंडोज में एक EXE को डबल क्लिक करते हैं, तो वर्किंग डायरेक्टरी यूजर की प्राइवेट लोकेशन होती है और एक्जिक्यूटेबल लोकेशन नहीं!
तोमर डब्ल्यू

@TomerW इसे डबल क्लिक करने के अलावा एक निष्पादन योग्य चलाने के कई तरीके हैं।
डीव्यू

सही है, फिर भी ... एक आवेदन हर तरह से काम करना चाहिए, जिसमें Dblclick भी शामिल है, जो सबसे आम है, मुझे लगता है।
तोमर डब्ल्यू

17

मैं भी इसी समस्या से मिला और मैं इसके माध्यम से प्राप्त करने में सक्षम था। इसलिए मुझे मेरे द्वारा लागू किए गए चरणों की व्याख्या करें। मैं इसे आपके परिदृश्य के अनुसार समझाऊंगा।

मेरी विधि के अनुसार हमें सापेक्ष पथ प्राप्त करने के लिए 'पथ' वर्ग और 'असेंबली' वर्ग का उपयोग करने की आवश्यकता है।

इसलिए बयानों का उपयोग करते हुए पहले System.IO और System.Reflection आयात करें।

फिर नीचे दी गई कोड लाइन टाइप करें।

        var outPutDirectory = Path.GetDirectoryName(Assembly.GetExecutingAssembly(). CodeBase);

वास्तव में ऊपर दी गई लाइन आपकी परियोजना के आउटपुट डायरेक्टरी के मार्ग को संग्रहीत करती है। (यहाँ 'आउटपुट' निर्देशिका आपके प्रोजेक्ट के डीबग फ़ोल्डर को संदर्भित करती है )।

अब अपने FolderIcon डायरेक्टरी को डीबग फ़ोल्डर में कॉपी करें। फिर निचे दी गई लाइन टाइप करें।

var iconPath = Path.Combine(outPutDirectory, "FolderIcon\\Folder.ico");

अब इस 'iconPath' वेरिएबल में आपके Folder.ico का संपूर्ण पथ है। आपको बस इसे एक स्ट्रिंग चर में स्टोर करना है। उसके लिए नीचे दिए गए कोड की लाइन का उपयोग करें।

string icon_path = new Uri(iconPath ).LocalPath;

अब आप इस आइकॉन_पथ स्ट्रिंग वैरिएबल को आइकॉन के सापेक्ष पथ के रूप में उपयोग कर सकते हैं।

धन्यवाद।


1
file:रास्ते के सामने क्यों है
Kolob Canyon

2
@KolobCanyon ऐसा इसलिए है क्योंकि .NET असेंबली को URI की एक किस्म से चलाया जा सकता है और न केवल डिस्क (COM ऑब्जेक्ट्स, RPC, Etc ...) से इस्तेमाल किया जा सकता है, Assembly.GetExecutingAssembly().Locationयदि आप सुनिश्चित करें कि आप एक फ़ाइल (EXE / DLL) के साथ काम कर रहे हैं
तोमर डब्ल्यू

3

मुझे लगता है कि इसका उपयोग करना सबसे आसान होगा

new Uri("pack://application:,,/FolderIcon/" + youImageICO);

या यह कोड किसी भी मशीन पर काम करेगा कि यदि आपका फ़ोल्डर आपके रूट प्रोजेक्ट में है यदि आप इसे बदलना चाहते हैं ... तो बस इस अनुभाग को बदलें "@ .."

public static string bingPathToAppDir(string localPath)
{
    string currentDir = Environment.CurrentDirectory;
    DirectoryInfo directory = new DirectoryInfo(
        Path.GetFullPath(Path.Combine(currentDir, @"..\..\" + localPath)));
    return directory.ToString();
}

2

विज़ुअल स्टूडियो में कृपया समाधान एक्सप्लोरर फलक में 'Folder.ico' फ़ाइल पर क्लिक करें। फिर आपको Properties pane दिखाई देगी। कॉपी टू आउटपुट डायरेक्टरी ’व्यवहार को Copy यदि नया है तो कॉपी करें’ में बदलें। यह विजुअल स्टूडियो को आउटपुट बिन डायरेक्टरी में फाइल कॉपी करेगा।

अब केवल संबंधित प्रकार का उपयोग करके फ़ाइल पथ प्राप्त करने के लिए:

string pathToIcoFile = AppDomain.CurrentDomain.BaseDirectory + "//FolderIcon//Folder.ico";

उम्मीद है कि मदद की।

हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.