"প্রদত্ত পাথের ফর্ম্যাটটি সমর্থিত নয়।"


103

আমার ওয়েব পরিষেবায় আমার কাছে নিম্নলিখিত কোড রয়েছে:

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

কোডের ২ লাইন থেকে এই ত্রুটি বার্তাটি দিয়ে কেউ আমাকে সমস্যা সমাধানে সহায়তা করতে পারে?

প্রদত্ত পাথের ফর্ম্যাটটি সমর্থিত নয়।

ফোল্ডারে অনুমতি সকলের সম্পূর্ণ অ্যাক্সেসে সেট করা থাকে এবং এটি ফোল্ডারের আসল পথ।

ব্রেকপয়েন্ট আমার মান দিলেন str_uploadpathযেমন C:\\webprojects\\webservices\\UploadBucket\\Raw\\

এই স্ট্রিংয়ে কী ভুল?


এর মান কী fileName?
জাস্টিন

মত শোনায় fileNameখালি।
জেরেমি ম্যাকগি

জাস্টিন, আপনি ঠিক বলেছেন। ফাইলের নাম থেকে মানটিতে সি: / ছিল। এটাই আমাকে হত্যা করছিল। ধন্যবাদ।
সমস্ত স্বর্ণকেশী

উত্তর:


125

বরং ব্যবহার না করে str_uploadpath + fileName, ব্যবহার করার চেষ্টা করুন System.IO.Path.Combineপরিবর্তে:

Path.Combine(str_uploadpath, fileName);

যা একটি স্ট্রিং প্রদান করে।


এখনই একটি ত্রুটি পেয়েছে: ত্রুটি 4 নাম-স্থান নির্দেশিকা ব্যবহার করে কেবল নামস্থানগুলিতে প্রয়োগ করা যেতে পারে; 'সিস্টেম.আইও.পাথ' একটি প্রকার নয় নামস্থান
সমস্ত স্বর্ণকেশী

2
@ সমস্ত ব্লন্ড using System.IO;উপরে রাখুন, তারপরে পরিষ্কার করুন str_uploadpath + fileNameএবং লিখুনPath.Combine(str_uploadpath, fileName)

কোডটি এখন নীচের মত দেখাচ্ছে, একই ত্রুটি: প্রদত্ত পাথের ফর্ম্যাটটি সমর্থিত নয়। স্ট্রিং str_uploadpath = সার্ভার.ম্যাপপথ (@ "/ আপলোডবকেট / কাঁচা /"); str_uploadpath = Path.Compine (str_uploadpath, fileName); ফাইল স্ট্রিম ইজজফিল স্ট্রিম = নতুন ফাইল স্ট্রিম (str_uploadpath, FileMode.Create, FileAccess.ReadWrite);
সমস্ত স্বর্ণকেশী

1
@ সমস্ত আপনার কোডটি ডিবাগ করার চেষ্টা করুন। লাইনের ঠিক আগে লাইনে একটি ব্রেক পয়েন্ট রাখুন যা ত্রুটির কারণ ঘটায় (ভিজুয়াল স্টুডিওতে F9)। আপনার প্রোগ্রাম চালান। প্রোগ্রামটি ব্রেক পয়েন্টে থামলে ভেরিয়েবলের উপর মাউস রাখুন str_uploadpath। এর মূল্য কত?

1
আমি নীচের পথে সমর্থন পাথ পাচ্ছি না কেন? "সি: \ ব্যবহারকারীগণ \ প্রশাসক \ অ্যাপডেটা \ স্থানীয় \ অ্যাডোব \ ফ্ল্যাশ সিএস 6 \ en_US \ কনফিগারেশন \ কোডমোডেল \ সেমি-ক্যাশে \ সুইচসিছে \ বেসমোভি 3.swc1272273593 \ লাইব্রেরি.এসএফএফ" যদি আমি এটি এক্সপ্লোরারে পেস্ট করি তবে এটি সূক্ষ্মভাবে খোলে। নেট এর সিস্টেম.আইও.ফাই.আরএলআলবাইটস পদ্ধতিটি ত্রুটিটিকে ছুঁড়ে ফেলে। এটি অবশ্যই একটি বৈধ এবং সঠিক পথ, তবে ত্রুটি কেন?
ত্রিঞ্চো

51

আমি দেখতে পাচ্ছি যে পুরো পথ দিয়ে ফাইলের নাম সংরক্ষণ করার চেষ্টা করার সময় প্রবর্তকটি বুঝতে পেরেছিলেন যে ত্রুটি ঘটেছে। আসলে ":"এই ত্রুটিটি পেতে ফাইলের নাম থাকা যথেষ্ট । যদি ":"আপনার ফাইলের নাম থাকতে পারে (উদাহরণস্বরূপ যদি আপনার ফাইলের নামের একটি তারিখ স্ট্যাম্প থাকে) নিশ্চিত করুন যে আপনি এগুলি অন্য কোনও জায়গায় প্রতিস্থাপন করেছেন। অর্থাৎ,

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

2
এটি আমার ফাইল নাম সহ আমি যা করেছি তা ঠিক করেছে। আমি আমার ফাইলে বর্তমান তারিখ এবং সময় সংযোজন করছি এবং ":" মানগুলি আমার প্রোগ্রামটিকে ওপি রেফারেন্সযুক্ত ত্রুটি ছুঁড়ে ফেলার কারণ হিসাবে তৈরি করেছিল।
acedanger

1
এটি প্রায়শই ব্যবহার করে ঘটে Path.GetInvalidPathCharsতবে না Path.GetInvalidFileNameChars, যেমনটি আমার ক্ষেত্রে হয়েছিল।
Seph

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

আপনি যদি ফাইল সিস্টেমে কোনও ফাইল সংরক্ষণ করার চেষ্টা করছেন। পাথ.কোমাইন বুলেট প্রুফ নয় কারণ ফাইলের নামটিতে অবৈধ অক্ষর থাকলে এটি আপনাকে সাহায্য করবে না। এখানে একটি এক্সটেনশন পদ্ধতি যা ফাইলের নাম থেকে অবৈধ অক্ষরগুলি সরিয়ে দেয়:

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()));
ইউশা আলেয়াউব

7

এই ত্রুটি ঘটাতে পারে এমন অন্যান্য বিষয়গুলির মধ্যে:

পূর্ণ পাথফিল স্ট্রিংটিতে আপনার নির্দিষ্ট অক্ষর থাকতে পারে না।

উদাহরণস্বরূপ, এই অক্ষরগুলি স্ট্রিমরাইটার ফাংশন ক্রাশ করবে:

"/"  
":"

অন্যান্য বিশেষ অক্ষরগুলিও এটি ক্র্যাশ হতে পারে। আমি খুঁজে পেয়েছি যখন আপনি চেষ্টা করেন, উদাহরণস্বরূপ, একটি ফাইলের নামটিতে একটি ডেটটাইম স্ট্যাম্প রাখার জন্য:

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

এই সমস্যাটি প্রতিরোধের একটি উপায় হ'ল সৌম্য ব্যক্তিদের সাথে নিউফাইলআউটস-এ সমস্যার অক্ষরগুলি প্রতিস্থাপন করা:

' 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

আপনি যদি পাওয়ারশেলের মধ্যে এই ত্রুটিটি পান তবে এটি সম্ভবত কারণ আপনি Resolve-Pathকোনও দূরবর্তী পাথ সমাধান করার জন্য ব্যবহার করছেন

 Resolve-Path \\server\share\path

এই ক্ষেত্রে, Resolve-Pathকোনও অবজেক্ট ফেরত দেয় যা কোনও স্ট্রিংয়ে রূপান্তরিত হওয়ার পরে কোনও বৈধ পথ ফেরায় না। এটি পাওয়ারশেলের অভ্যন্তরীণ পথ ফেরায়:

> [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\")


ইউআরএলগুলির সাধারণত ফরোয়ার্ড স্ল্যাশ থাকে এবং MapPathএটি কোনওভাবেই বের করার জন্য যথেষ্ট স্মার্ট।
জাস্টিন

@ স্পেন্ডার @স্ট্রিংয়ের সামনের দিকে একটি রয়েছে যা সেগুলি থেকে পালিয়ে যায়।
জাস্টিন

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

আমি এসএসআইএস-এ কোনও ফাইলের সংরক্ষণাগার তৈরি করতে একটি সাধারণ ফাইল সিস্টেম টাস্কে ব্যবহারের জন্য একটি ভেরিয়েবলের জন্য (সীমাবদ্ধ) এক্সপ্রেশন বিল্ডার ব্যবহার করছি।

ত্রুটি বন্ধ করতে কলোনগুলি সরিয়ে ফেলার জন্য এটি আমার দ্রুত এবং নোংরা হ্যাক: @ [ব্যবহারকারী :: লোকালফিল] + "-" + প্রতিস্থাপন ((ডিএসএসটিআর, 30, 1252) GETDATE (), ":", "-") + ".xml"


0

আমার আজ একই সমস্যা ছিল। আমি আমার কোডটিতে যে ফাইলটি লোড করার চেষ্টা করছিলাম সেটি এক্সেলে সম্পাদনার জন্য উন্মুক্ত ছিল। এক্সেল বন্ধ করার পরে কোডটি কাজ শুরু করে!


-1

যদি মানটি ফাইলের মতো একটি ফাইল url হয়: // সি: / যাই হোক না কেন, নিয়মিত ফাইল নামটিতে অনুবাদ করতে উরি ক্লাসটি ব্যবহার করুন:

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

সাধারণভাবে, সরবরাহিত এপিআই ব্যবহার করা সর্বোত্তম অনুশীলন।

আমাদের সাইট ব্যবহার করে, আপনি স্বীকার করেছেন যে আপনি আমাদের কুকি নীতি এবং গোপনীয়তা নীতিটি পড়েছেন এবং বুঝতে পেরেছেন ।
Licensed under cc by-sa 3.0 with attribution required.