ما هي أفضل طريقة للجمع بين مسار واسم الملف في C # /. NET؟
سؤال
ما هي أفضل طريقة للجمع بين مسار مع اسم الملف؟
وهذا هو، c:\foo
معين وbar.txt
، أريد c:\foo\bar.txt
.
ونظرا c:\foo
و..\bar.txt
، أريد إما خطأ أو c:\foo\bar.txt
(لذلك لا يمكن استخدام Path.Combine()
مباشرة). وبالمثل لc:\foo
وbar/baz.txt
، أريد خطأ أو c:\foo\baz.txt
(لا c:\foo\bar\baz.txt
).
وأنا أدرك، ويمكنني أن تأكد من أن اسم الملف لا يحتوي على '\' أو '/'، ولكن هل هذا يكفي؟ إذا لم يكن كذلك، ما هو الاختيار الصحيح؟
المحلول
إذا كنت تريد "سيئة" أسماء لتوليد خطأ:
if (Path.GetFileName(fileName) != fileName)
{
throw new Exception("'fileName' is invalid!");
}
string combined = Path.Combine(dir, fileName);
وأو، إذا كنت ترغب فقط في تصحيح بصمت أسماء "سيئة" دون طرح استثناء:
string combined = Path.Combine(dir, Path.GetFileName(fileName));
نصائح أخرى
هل يمكن استخدام:
Path.Combine(folder, Path.GetFileName(fileName))
وأو لتخطي خارج \ (لم تختبر، وربما Path.GetFileName يعالج هذا تلقائيا)
Path.Combine(folder, Path.GetFileName(fileName.Replace("/","\\")))
كن على علم أنه عند استخدام Path.Combine(arg1, arg2)
- إذا كان المستخدم الخاص بك مدخلات مسار ملف مؤهل بشكل كامل لARG2 فإنه سيتم تجاهل ARG1، واستخدام ARG2 كمسار.
في رأيي، ثمل مايكروسوفت هناك! وهذا يمكن أن أترك لكم مفتوحة على مصراعيها مع المستخدم القرصنة الملفات بأكمله. حذر من أن يكون، قراءة غرامة المطبوعة! إذا كنت الجمع بين مسارات تستخدم: var newPath = path1 + @"\" + path2;
النتائج أبسط ولا غير متوقعة ...