C #: قطاع أحرف غير قانونية من سلسلة اسم الملف

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

  •  05-07-2019
  •  | 
  •  

سؤال

لماذا لا هذا فعل أي شيء، خرج مطابق لإدخال؟ أنا في حيرة !!!

string name = ";;;'']][[ zion \\\[[[]]]"  
char[] invalidChars = System.IO.Path.GetInvalidPathChars();
string invalidString = Regex.Escape(new string(invalidChars));

string valid = Regex.Replace(name, "[" + invalidString + "]", "");
هل كانت مفيدة؟

المحلول

وتحرير:

وأنا أعتقد أنه قد يكون مجرد حالة من بيانات الاختبار الكمال (جنبا إلى جنب مع تغيير وظيفة أن الآخرين قد اقترح). جرب هذا:

string name = "tru\\e.jpg";
char[] invalidChars = System.IO.Path.GetInvalidFileNameChars();
string invalidString = Regex.Escape(new string(invalidChars));
string valid = Regex.Replace(name, "[" + invalidString + "]", "");
Console.WriteLine(valid);

وأحصل على "true.jpg" الانتاج. أود أن أقترح بالتأكيد أكثر بكثير اختبار قبل استخدام هذا في الإنتاج! :)

نصائح أخرى

واحصل على الأحرف ملف غير صالح باستخدام

char[] invalidChars=System.IO.Path.GetInvalidFileNameChars();

وماذا تعني أنها لن تفعل أي شيء؟ ركضت التالية في تطبيق وحدة:

string name = ";;;'']][[ zion \\\\[[[]]]";
char[] invalidChars = System.IO.Path.GetInvalidPathChars();
string invalidString = Regex.Escape(new string(invalidChars));

string valid = Regex.Replace(name, "[" + invalidString + "]", "");
Console.WriteLine(valid);

وبالمناسبة كان تركيب الخاص خاطئ، كان لديك بعض أحرف لا يمكن إلغاؤها وكنت في عداد المفقودين منقوطة.

وحصلت على النتيجة التالية.

;;;'']][[ zion \\[[[]]]

ما هي النتيجة الصحيحة. ربما يجب عليك أن تسأل سؤالا جديدا حول ما تحاول القيام به لنهج الحالي يشير إلى أن لم يكن لديك فهم قوي من التعبيرات المنتظمة.

على تحديث : في هل تحاول التحقق من أسماء الملفات؟ إذا كان الأمر كذلك ربما كنت ترغب في استخدام:

System.IO.Path.GetInvalidFileNameChars();

على تحديث : في وهنا لائحة من أحرف غير صالحة التي تأتي من تلك الطريقة GetInvalidPathChars()

RealInvalidPathChars = new char[] { 
        '"', '<', '>', '|', '\0', '\x0001', '\x0002', '\x0003', '\x0004', '\x0005', '\x0006', '\a', '\b', '\t', '\n', '\v', 
        '\f', '\r', '\x000e', '\x000f', '\x0010', '\x0011', '\x0012', '\x0013', '\x0014', '\x0015', '\x0016', '\x0017', '\x0018', '\x0019', '\x001a', '\x001b', 
        '\x001c', '\x001d', '\x001e', '\x001f'
     };

وذلك أساسا يمكن أن تشمل ما يلي هي أحرف مسار غير صالحة ASCII الأحرف / يونيكود من 1 إلى 31، وكذلك الاقتباس ( ")، وأقل من (<)، أكبر من (>)، وأنابيب (|)، مسافة للخلف (\ ب )، لاغية (\ 0) وعلامة (\ ر).

لا شيء من الذي يبدو أن يحدث في سلسلة الأصلي.

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