ما هي أفضل طريقة للجمع بين مسار واسم الملف في C # /. NET؟

StackOverflow https://stackoverflow.com/questions/1048129

  •  20-08-2019
  •  | 
  •  

سؤال

ما هي أفضل طريقة للجمع بين مسار مع اسم الملف؟

وهذا هو، 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; النتائج أبسط ولا غير متوقعة ...

مرخصة بموجب: CC-BY-SA مع الإسناد
لا تنتمي إلى StackOverflow
scroll top