"दिए गए पथ का प्रारूप समर्थित नहीं है।"


103

मेरी वेब सेवा में निम्नलिखित कोड हैं:

string str_uploadpath = Server.MapPath("/UploadBucket/Raw/");
FileStream objfilestream = new FileStream(str_uploadpath +
                fileName, FileMode.Create, FileAccess.ReadWrite);

क्या कोई मुझे कोड के लाइन 2 से इस त्रुटि संदेश के साथ समस्या को हल करने में मदद कर सकता है।

दिए गए पथ का प्रारूप समर्थित नहीं है।

फ़ोल्डर पर अनुमति सभी के लिए पूर्ण पहुँच पर सेट है और यह फ़ोल्डर का वास्तविक पथ है।

ब्रेकपाइंट मुझे का मूल्य दिया str_uploadpathके रूप में C:\\webprojects\\webservices\\UploadBucket\\Raw\\

इस स्ट्रिंग में क्या गलत है?


का मूल्य क्या है fileName?
जस्टिन

लगता है जैसे fileNameखाली है।
जेरेमी मैकगी

जस्टिन, आप सही थे। फ़ाइल नाम से मान में C: / नाम था। वही मुझे मार रहा था। धन्यवाद।
सभी गोरा

जवाबों:


125

बल्कि का उपयोग करने से str_uploadpath + fileName, का उपयोग कर प्रयास System.IO.Path.Combineके बजाय:

Path.Combine(str_uploadpath, fileName);

जो एक स्ट्रिंग लौटाता है।


अब एक त्रुटि मिली: त्रुटि 4 एक नाम स्थान निर्देश का उपयोग केवल नामस्थान पर लागू किया जा सकता है; 'System.IO.Path' एक प्रकार का नाम नहीं है
All Blond

2
@ सभी ब्लॉन्ड को using System.IO;ऊपर रखें, फिर साफ़ करें str_uploadpath + fileNameऔर लिखेंPath.Combine(str_uploadpath, fileName)

कोड अब नीचे जैसा दिखता है, वही त्रुटि: दिए गए पथ का प्रारूप समर्थित नहीं है। string str_uploadpath = Server.MapPath (@ "/ UploadBucket / Raw /"); str_uploadpath = Path.Combine (str_uploadpath, fileName); FileStream objfilestream = नया FileStream (str_uploadpath, FileMode.Create, FileAccess.ReadWrite);
सभी गोरा

1
@ सभी अपने कोड को डीबग करने का प्रयास करेंगे। त्रुटि के कारण लाइन के ठीक पहले लाइन पर ब्रेक पॉइंट लगाएं (विज़ुअल स्टूडियो में F9)। अपना प्रोग्राम चलाएं। जब प्रोग्राम ब्रेक पॉइंट पर रुक जाता है, तो चर पर माउस को हॉवर करें str_uploadpath। इसका मूल्य क्या है?

1
मुझे पथ निम्नलिखित पथ पर समर्थित नहीं मिल रहा है, क्यों? "C: \ Users \ Admin \ AppData \ Local \ Adobe \ Flash CS6 \ en_US \ कॉन्फ़िगरेशन \ CodeModel \ cm-cache \ SwcCache \ basemovie3.swc1272273593 \ पुस्तकालय .swf" यदि मैं इसे एक्सप्लोरर में पेस्ट करता हूं, तो यह ठीक खुलता है, लेकिन। NET का System.IO.File.ReadAllBytes मेथड उस एरर को फेंकता है। यह निश्चित रूप से एक वैध और सटीक मार्ग है, तो त्रुटि क्यों?
त्रिवेंको

51

मैं देखता हूं कि प्रवर्तक को पता चला कि फ़ाइल पथ को पूरे पथ के साथ सहेजने का प्रयास करते समय त्रुटि हुई। वास्तव में यह ":"त्रुटि पाने के लिए फ़ाइल नाम में पर्याप्त है । यदि ":"आपके फ़ाइल नाम में हो सकता है (उदाहरण के लिए यदि आपके फ़ाइल नाम में कोई डाक टिकट है) तो सुनिश्चित करें कि आप इन्हें किसी और चीज़ से प्रतिस्थापित करते हैं। अर्थात:

string fullFileName = fileName.Split('.')[0] + "(" + DateTime.Now.ToString().Replace(':', '-') + ")." + fileName.Split('.')[1];

2
यह एक मुद्दा मैंने अपने फ़ाइलनाम के साथ तय किया है। मैं अपनी फ़ाइल में वर्तमान तिथि और समय जोड़ रहा हूँ और ":" मान मेरे प्रोग्राम को ओपी संदर्भित त्रुटि को फेंकने के लिए पैदा कर रहा था।
एकेडेन्जर जूल

1
ऐसा अक्सर होता है Path.GetInvalidPathCharsलेकिन नहीं Path.GetInvalidFileNameChars, जैसा कि मेरे लिए हुआ था।
सिपाही

4
धन्यवाद! यही कारण है कि कई उत्तर पोस्ट करना हमेशा एक अच्छा विचार है।
निक

31

मेरे लिए यह समस्या इंसानी आंख "‪" लेफ्ट-टू-राइट एंबेडिंग कैरेक्टर के लिए एक अदृश्य थी ।
यह स्ट्रिंग की शुरुआत में अटक गया ('डी' से ठीक पहले), जब मैंने पथ को कॉपी-पेस्ट किया, तो विंडोज़ फ़ाइल सुरक्षा टैब से।

var yourJson = System.IO.File.ReadAllText(@"D:\test\json.txt"); // Works
var yourJson = System.IO.File.ReadAllText(@"‪D:\test\json.txt"); // Error

इसलिए, पहली नज़र में समान, दो लाइनें वास्तव में अलग हैं।


21

यदि आप फ़ाइल सिस्टम में फ़ाइल सहेजने का प्रयास कर रहे हैं। Path.Combine बुलेट प्रूफ नहीं है क्योंकि यह आपकी मदद नहीं करेगा यदि फ़ाइल नाम में अमान्य वर्ण हैं। यहाँ एक विस्तार विधि है जो फ़ाइल नामों से अमान्य वर्णों को अलग करती है:

public static string ToSafeFileName(this string s)
{
        return s
            .Replace("\\", "")
            .Replace("/", "")
            .Replace("\"", "")
            .Replace("*", "")
            .Replace(":", "")
            .Replace("?", "")
            .Replace("<", "")
            .Replace(">", "")
            .Replace("|", "");
    }

और उपयोग हो सकता है:

Path.Combine(str_uploadpath, fileName.ToSafeFileName());

या उससे भी कमreturn string.Concat(s.Split(Path.GetInvalidFileNameChars()));
Yousha Aleayoub

7

अन्य चीजों में जो इस त्रुटि का कारण बन सकती हैं:

पूर्ण PathFile स्ट्रिंग में आपके पास कुछ वर्ण नहीं हो सकते।

उदाहरण के लिए, ये वर्ण स्ट्रीमरिटर फ़ंक्शन को क्रैश कर देंगे:

"/"  
":"

अन्य विशेष वर्ण भी हो सकते हैं जो इसे भी क्रैश करते हैं। मैंने पाया कि ऐसा तब होता है जब आप उदाहरण के लिए, किसी फ़ाइल नाम में डेटटाइम स्टैम्प लगाने की कोशिश करते हैं:

AppPath = Path.GetDirectoryName(giFileNames(0))  
' AppPath is a valid path from system. (This was easy in VB6, just AppPath = App.Path & "\")
' AppPath must have "\" char at the end...

DateTime = DateAndTime.Now.ToString ' fails StreamWriter... has ":" characters
FileOut = "Data_Summary_" & DateTime & ".dat"
NewFileOutS = Path.Combine(AppPath, FileOut)
Using sw As StreamWriter = New StreamWriter(NewFileOutS  , True) ' true to append
        sw.WriteLine(NewFileOutS)
        sw.Dispose()
    End Using

इस परेशानी को रोकने का एक तरीका है सौम्य लोगों के साथ NewFileOutS में समस्या के पात्रों को बदलना:

' clean the File output file string NewFileOutS so StreamWriter will work
 NewFileOutS = NewFileOutS.Replace("/","-") ' replace / with -
 NewFileOutS = NewFileOutS.Replace(":","-") ' replace : with - 

' after cleaning the FileNamePath string NewFileOutS, StreamWriter will not throw an (Unhandled) exception.

आशा है कि यह किसी को कुछ सिरदर्द बचाता है ...!


आह आपका धन्यवाद! मैं नाम में एक आईएसओ तिथि स्ट्रिंग के साथ एक फ़ाइल सहेज रहा था, लेकिन इसमें अवैध ":" है! धन्यवाद!
मेसन

3

यदि आपको PowerShell में यह त्रुटि मिलती है, तो यह सबसे अधिक संभावना है क्योंकि आप Resolve-Pathएक दूरस्थ पथ, जैसे, का उपयोग कर रहे हैं

 Resolve-Path \\server\share\path

इस स्थिति में, Resolve-Pathएक ऑब्जेक्ट लौटाता है, जब एक स्ट्रिंग में परिवर्तित किया जाता है, एक वैध पथ नहीं लौटाता है। यह PowerShell का आंतरिक पथ लौटाता है:

> [string](Resolve-Path \\server\share\path)
Microsoft.PowerShell.Core\FileSystem::\\server\share\path

समाधान का उपयोग करना है ProviderPath द्वारा लौटाए गए ऑब्जेक्ट पर संपत्तिResolve-Path :

> Resolve-Path \\server\share\path | Select-Object -ExpandProperty PRoviderPath
\\server\share\path
> (Resolve-Path \\server\share\path).ProviderPath
\\server\share\path

2

बदलने की कोशिश करें:

Server.MapPath("/UploadBucket/Raw/")

सेवा

Server.MapPath(@"\UploadBucket\Raw\")


आमतौर पर URL में फ़ॉरवर्ड स्लैश होते हैं और MapPathयह किसी भी तरह से यह पता लगाने के लिए पर्याप्त स्मार्ट है।
जस्टिन

@spender @स्ट्रिंग के सामने एक है जो उन लोगों से बच जाता है।
जस्टिन

2

यह मेरी समस्या थी, जो किसी और की मदद कर सकती है - हालांकि यह ओपी का मुद्दा नहीं था:

DirectoryInfo diTemp = new DirectoryInfo(strSomePath);
FileStream fsTemp = new FileStream(diTemp.ToString());

मैंने एक लॉग फ़ाइल में अपना पथ आउटपुट करके समस्या को निर्धारित किया, और इसे सही ढंग से फ़ॉर्मेट नहीं कर पाया। मेरे लिए सही काफी सरल था:

DirectoryInfo diTemp = new DirectoryInfo(strSomePath);
FileStream fsTemp = new FileStream(diTemp.FullName.ToString());

1

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


0

मैं SSIS में फ़ाइल का एक संग्रह बनाने के लिए एक साधारण फ़ाइल सिस्टम टास्क में उपयोग के लिए वैरिएबल के लिए सीमित (सीमित) अभिव्यक्ति बिल्डर का उपयोग कर रहा हूं।

त्रुटि को रोकने के लिए कॉलोनों को हटाने के लिए यह मेरी त्वरित और गंदी हैक है: @ [उपयोगकर्ता :: लोकलफाइल] + "-" + उत्तर ((DT_STR, 30, 1252) GETDATE (), ":", "" ") + ".xml"


0

मेरा आज भी यही मुद्दा था। जिस फाइल को मैं अपने कोड में लोड करने की कोशिश कर रहा था, वह एक्सेल में संपादन के लिए खुली थी। Excel बंद करने के बाद, कोड काम करना शुरू कर दिया!


-1

यदि मान फ़ाइल की तरह फ़ाइल url है: // C: / जो भी हो, एक नियमित फ़ाइलनाम में अनुवाद करने के लिए Uri वर्ग का उपयोग करें:

var localPath = (new Uri(urlStylePath)).AbsolutePath

सामान्य तौर पर, दिए गए एपीआई का उपयोग करना सबसे अच्छा अभ्यास है।

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