C #: قطاع أحرف غير قانونية من سلسلة اسم الملف
-
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) وعلامة (\ ر).
لا شيء من الذي يبدو أن يحدث في سلسلة الأصلي.