WPF

2011-06-10 4 views
7

के साथ एक टेक्स्ट फ़ाइल खोलें एक टेक्स्ट फ़ाइल है जिसे मैंने अपने प्रोजेक्ट रूट फ़ोल्डर में बनाया है। अब, मैं उस पाठ फ़ाइल को बाहरी रूप से लॉन्च करने के लिए Process.Start() विधि का उपयोग करने का प्रयास कर रहा हूं।WPF

मुझे जो समस्या मिली है वह यह है कि फ़ाइल पथ गलत है और Process.Start() इस टेक्स्ट फ़ाइल को नहीं मिला। मेरा कोड निम्नानुसार है:

Process.Start("Textfile.txt"); 

तो मुझे उस टेक्स्ट फ़ाइल का सही संदर्भ कैसे देना चाहिए? क्या मैं पूर्ण पथ के बजाय सापेक्ष पथ का उपयोग कर सकता हूं? धन्यवाद।

संपादित करें: यदि मैं इस पर कोड ऊपर बदलता हूं, तो यह काम करेगा?

string path = Assembly.GetExecutingAssembly().Location; 
Process.Start(path + "/ReadMe.txt"); 
+0

आपको यह सुनिश्चित करने की ज़रूरत है कि फ़ाइल की प्रतिलिपि बनाई गई है, आप एम्बेडेड संसाधनों के लिए 'Process.Start' का उपयोग नहीं कर सकते हैं। गुणों की जांच करें और क्रमशः 'आउटपुट निर्देशिका में कॉपी करें' विशेषता सेट करें। –

उत्तर

12

विंडोज पता जहां फ़ाइल खोजने के लिए की जरूरत है के साथ अपने रास्ते पर है कि संलग्न कर सकता है, ताकि आप की जरूरत है किसी भी तरह कि निर्दिष्ट करें:

या तो निरपेक्ष पथ का उपयोग कर:

Process.Start("C:\\1.txt"); 

या वर्तमान निर्देशिका सेट करें:

Environment.CurrentDirectory = "C:\\"; 
Process.Start("1.txt"); 

आम तौर पर CurrentDirectory निष्पादन योग्य के स्थान पर सेट किया गया है।

[संपादित करें]

फ़ाइल एक ही निर्देशिका जहां निष्पादन आप इस तरह कोड का उपयोग कर सकते है में है:

var directory = Path.GetDirectoryName(Assembly.GetEntryAssembly().Location); 
var file = Path.Combine(directory, "1.txt"); 
Process.Start(file); 
+0

यदि मैं ऐसा करता हूं, तो यह काम करेगा? स्ट्रिंग पथ = असेंबली। GetExecutingAssembly() स्थान; प्रक्रिया। स्टार्ट (पथ + "/ReadMe.txt"); – woodykiddy

+0

यदि फ़ाइल हां से निष्पादन योग्य के समान निर्देशिका में है। हालांकि आप स्ट्रिंग कॉन्सटेनेशन के बजाय पथ.कॉम्बिन का बेहतर उपयोग करते हैं। इसके अलावा 'स्थान' में फ़ाइल का नाम होगा। आपको केवल निर्देशिका प्राप्त करने की आवश्यकता है। –

+0

@woodykiddy - उत्तर को अपडेट किया गया। –

1

यदि आप किसी रिश्तेदार पथ का उपयोग करना चाहते हैं तो आपको वर्तमान निर्देशिका जाननी होगी।

System.Envrionment.CurrentDirectory 

आप पथ

System.IO.Path.Combine(System.Envrionment.CurrentDirectory, "Textfile.txt") 
+0

'Process.Start' बहुत कुछ भी खोल सकता है, यह फ़ाइल से जुड़े अनुप्रयोग का उपयोग करने का प्रयास करता है। –

+0

आह। अब मुझे stoopid लगता है;) –

+0

यदि 'ProcessStartInfo.UseShellExecute' सत्य है, जो डिफ़ॉल्ट है। –

1

के रूप में डिफ़ॉल्ट पथ वर्तमान लेकर जा सकते हैं Application.StartupPath पथ का उपयोग कर प्रयास करें निर्देशिका।

इस परिदृश्य निम्नलिखित लिंक पर समझाया गया है ..

Environment.CurrentDirectory in C#.NET

http://start-coding.blogspot.com/2008/12/applicationstartuppath.html

2

जिस तरह से आप यह कर रहे हैं ठीक है। यह टेक्स्ट फ़ाइल मिलेगा जो आपके exe के समान निर्देशिका में है और यह इसे डिफ़ॉल्ट एप्लिकेशन (शायद notepad.exe) के साथ खोल देगा।

http://www.dotnetperls.com/process-start

हालांकि, अगर आप में एक पथ रखना चाहते हैं, तो आप पूर्ण पथ का उपयोग करने के लिए है: यहाँ ऐसा करने के तरीके की अधिक उदाहरण हैं।आप पूरा पथ निर्माण कर सकते हैं, जबकि केवल विधि इस पोस्ट में दिए गए रिश्तेदार पथ के बारे में देखभाल:

http://social.msdn.microsoft.com/Forums/en-US/vbgeneral/thread/e763ae8c-1284-43fe-9e55-4b36f8780f1c

वह कुछ इस तरह दिखेगा:

string pathPrefix; 

if(System.Diagnostics.Debugger.IsAttached()) 
{ 
    pathPrefix = System.IO.Path.GetFullPath(Application.StartupPath + "\..\..\resources\"); 
} 
else 
{ 
    pathPrefix = Application.StartupPath + "\resources\"; 
} 

Process.Start(pathPrefix + "Textfile.txt"); 

यह एक फ़ाइल को खोलने के लिए है आपके द्वारा प्रोजेक्ट में जोड़े गए फ़ोल्डर में संसाधन कहा जाता है। यदि आप इसे अपने प्रोजेक्ट रूट में चाहते हैं, तो उपरोक्त दो तारों में संसाधन फ़ोल्डर को छोड़ दें और आपको जाना अच्छा होगा।

0

एक खिड़कियों बॉक्स पर:

तुरंत यह निम्न फ़ाइल के स्थान के साथ

प्रारंभ नोटपैड। विन

process.start("notepad C:\Full\Directory\To\File\FileName.txt"); 
संबंधित मुद्दे