Yollar və fayl adlarından etibarsız simvolları necə aradan qaldırmaq olar?

Qanunsuz yolları və faylları basit bir sətirdən silmək üçün etibarlı və asan bir yola ehtiyac duyuram. Aşağıdakı kodu istifadə etdim, amma əskik olduğum bir şey yoxdur?

 using System; using System.IO; namespace ConsoleApplication1 { class Program { static void Main(string[] args) { string illegal = "\"M<>\"\\a/ry/ h**ad:>> a\\/:*?\"<>| li*tt|le|| la\"mb.?"; illegal = illegal.Trim(Path.GetInvalidFileNameChars()); illegal = illegal.Trim(Path.GetInvalidPathChars()); Console.WriteLine(illegal); Console.ReadLine(); } } } 
370
28 сент. Gary Willoughby tərəfindən təyin Sentyabr 28 2008-09-28 18:52 '08 at 18:52 2008-09-28 18:52
@ 26 cavab

Aşağıdakı kimi bir şey edin:

 string illegal = "\"M\"\\a/ry/ h**ad:>> a\\/:*?\"| li*tt|le|| la\"mb.?"; string invalid = new string(Path.GetInvalidFileNameChars()) + new string(Path.GetInvalidPathChars()); foreach (char c in invalid) { illegal = illegal.Replace(c.ToString(), ""); } 

Ancaq şərhlərlə razılaşmaq məcburiyyətindəyəm, yəqin ki, qeyri-qanuni yoldan qanuni, lakin ehtimal ki, istənilməyən bir yola əl atmaq əvəzinə qeyri-qanuni yolların mənbəyini anlamaq istərdim.

Düzenle: Ya da potensial olaraq Regex'yi istifadə edərək "ən yaxşı" həll.

 string illegal = "\"M\"\\a/ry/ h**ad:>> a\\/:*?\"| li*tt|le|| la\"mb.?"; string regexSearch = new string(Path.GetInvalidFileNameChars()) + new string(Path.GetInvalidPathChars()); Regex r = new Regex(string.Format("[{0}]", Regex.Escape(regexSearch))); illegal = r.Replace(illegal, ""); 

Ancaq ilk növbədə bunu nə üçün soruşur.

435
28 сент. Cavab Matthew Scharley 28 sentyabr 2008-09-28 19:03 '08 saat 19:03 'da 2008-09-28 19:03
 public string GetSafeFilename(string filename) { return string.Join("_", filename.Split(Path.GetInvalidFileNameChars())); } 
border=0

Bu cavab Ceres-dən başqa bir mövzu idi , mən bunu sadəcə və sadəcə sevirəm.

212
20 апр. Cavab Şahab ​​Fawzy 20 Aprel verilir 2014-04-20 16:06 '14 at 16:06 2014-04-20 16:06

Fayl adlarını təmizləmək üçün Linq istifadə edirəm. Doğru yolları yoxlamaq üçün asanlıqla uzatmaq olar.

 private static string CleanFileName(string fileName) { return Path.GetInvalidFileNameChars().Aggregate(fileName, (current, c) => current.Replace(c.ToString(), string.Empty)); } 

Yeniləmə

Bəzi şərhlər bu üsulun onlar üçün işləməyəcəyini göstərir, buna görə də DotNetFiddle snippetinə bir link daxil etdim ki, metodu test edə bilərsiniz.

https://dotnetfiddle.net/nw1SWY

201
12 сент. Cavab 12 sentyabrda Michael Minton tərəfindən verildi. 2011-09-12 23:38 '11 at 11:38 PM 2011-09-12 23:38

Linq istifadə edərək qeyri-qanuni simvolları silə bilərsiniz:

 var invalidChars = Path.GetInvalidFileNameChars(); var invalidCharsRemoved = stringWithInvalidChars .Where(x => !invalidChars.Contains(x)) .ToArray(); 

CHANGE
Şərhdə göstərilən tələb olunan heyətlə necə göründüyü belədir:

 var invalidChars = Path.GetInvalidFileNameChars(); string invalidCharsRemoved = new string(stringWithInvalidChars .Where(x => !invalidChars.Contains(x)) .ToArray()); 
83
24 нояб. 24 noyabr Gregor Slavec tərəfindən verilmiş cavab 2010-11-24 22:41 '10 at 10:41 PM 2010-11-24 22:41

Bunların hamısı böyük Path.GetInvalidFileNameChars , amma hamısı Path.GetInvalidFileNameChars istinad edirlər Path.GetInvalidFileNameChars , bu da hesab etdiyiniz kimi etibarlı olmaya bilər. Path.GetInvalidFileNameChars -da MSDN sənədlərində aşağıdakı qeydləri qeyd Path.GetInvalidFileNameChars :

Bu üsulla qayıdan dizi , fayl və qovluq adlarında etibarlı olmayan tam karakter dəstini ehtiva etmir. Yalnış simvolların tam dəsti fayl sisteminə görə dəyişə bilər. Məsələn, Windows masa üstü platformalarda, etibarsız yol simvolları 1 ilə 31 arasında olan ASCII / Unicode simvollarını, həmçinin bir quote ("), daha az (<), daha çox (>), boru (|), backspace (\ b) null (\ 0) və sekme (\ t).

Bu Path.GetInvalidPathChars ilə daha yaxşı Path.GetInvalidPathChars . Eyni qeyddə də var.

26
16 нояб. Cavab 16 noyabr tarixində René tərəfindən verilmişdir. 2011-11-16 16:22 '11 'də saat 16:22' da 2011-11-16 16:22

Başlamaq üçün, Trim yalnız xəttin başlanğıcından və ya sonundan simvolları rədd edir . İkincisi, həqiqətən, təhqiredici simvolları aradan qaldırmaq istəməyiniz və ya tez bir zamanda uğursuz olub-olmadığını qiymətləndirmək və istifadəçiyə onların adının etibarsız olduğunu bildirmək lazımdır. Mənim seçimim sonuncadır, amma mənim cavabı ən azı doğru və yanlışlığı necə göstərməlidir:

on123.ru.site/questions/10286 / .... Bu sualdan müntəzəm ifadənin dəyişdirilməsi ilə simvolları aradan qaldırmaq üçün müntəzəm ifadə istifadə edə bilərsiniz (əgər həqiqətən bunu etmək lazımdır).

18
28 сент. user7116 tərəfindən verilmiş cavab 28 sentyabr 2008-09-28 18:56 '08 at 18:56 2008-09-28 18:56

Fayl adları üçün:

 string cleanFileName = String.Join("", fileName.Split(Path.GetInvalidFileNameChars())); 

Tam yollar üçün:

 string cleanPath = String.Join("", path.Split(Path.GetInvalidPathChars())); 
16
11 февр. Cavab 11 fevralda Lily Finley tərəfindən verilir. 2014-02-11 05:36 '14 saat 05:36 AM 2014-02-11 05:36

Bunu bacarmaq üçün müntəzəm ifadələrdən istifadə edirəm. Birincisi, mən dinamik şəkildə müntəzəm bir ifadə yaratıram.

 string regex = string.Format( "[{0}]", Regex.Escape(new string(Path.GetInvalidFileNameChars()))); Regex removeInvalidChars = new Regex(regex, RegexOptions.Singleline | RegexOptions.Compiled | RegexOptions.CultureInvariant); 

Sonra tapmaq və əvəz etmək üçün sadəcə removeInvalidChars.Replace deyirəm. Bu, əlbəttə, yolun simvollarını əhatə etmək üçün genişləndirilə bilər.

15
28 сент. Jeff Yates tərəfindən verilmiş cavab 28 sentyabr. 2008-09-28 21:45 '08 saat 09:45 'da 2008-09-28 21:45

Mən Jeff Yatesin fikrini tamamilə üstün tuturam. Əgər bir az dəyişirsinizsə, yaxşı işləyəcəkdir:

 string regex = String.Format("[{0}]", Regex.Escape(new string(Path.GetInvalidFileNameChars()))); Regex removeInvalidChars = new Regex(regex, RegexOptions.Singleline | RegexOptions.Compiled | RegexOptions.CultureInvariant); 

Yalnız bir yaxşılaşma, normal ifadənin avtomatik olaraq yaradılmasından çəkinməkdir.

14
15 февр. Cavab yanvar 15-də verilir. 2011-02-15 17:21 '11 at 17:21 2011-02-15 17:21

Yanlış bir xarakterdən istifadəçi girişindən çıxarmağın ən yaxşı yolu, Regex sınıfını istifadə edərək qeyri-qanuni bir xarakteri əvəz etmək, arxada kodda bir üsul yaratmaq və ya RegularExpression nəzarətini istifadə edərək müştəri tərəfində test etməkdir.

 public string RemoveSpecialCharacters(string str) { return Regex.Replace(str, "[^a-zA-Z0-9_]+", "_", RegexOptions.Compiled); } 

Və ya

 <asp:RegularExpressionValidator ID="regxFolderName" runat="server" ErrorMessage="Enter folder name with az A-Z0-9_" ControlToValidate="txtFolderName" Display="Dynamic" ValidationExpression="^[a-zA-Z0-9_]*$" ForeColor="Red"> 
13
28 сент. Anomepanın verdiyi cavabı Sep 28 2013-09-28 09:35 '13 'da 9:35' də 2013-09-28 09:35 'da

İşdə .NET 3 və yuxarıya kömək edən kod parçasıdır.

 using System.IO; using System.Text.RegularExpressions; public static class PathValidation { private static string pathValidatorExpression = "^[^" + string.Join("", Array.ConvertAll(Path.GetInvalidPathChars(), x => Regex.Escape(x.ToString()))) + "]+$"; private static Regex pathValidator = new Regex(pathValidatorExpression, RegexOptions.Compiled); private static string fileNameValidatorExpression = "^[^" + string.Join("", Array.ConvertAll(Path.GetInvalidFileNameChars(), x => Regex.Escape(x.ToString()))) + "]+$"; private static Regex fileNameValidator = new Regex(fileNameValidatorExpression, RegexOptions.Compiled); private static string pathCleanerExpression = "[" + string.Join("", Array.ConvertAll(Path.GetInvalidPathChars(), x => Regex.Escape(x.ToString()))) + "]"; private static Regex pathCleaner = new Regex(pathCleanerExpression, RegexOptions.Compiled); private static string fileNameCleanerExpression = "[" + string.Join("", Array.ConvertAll(Path.GetInvalidFileNameChars(), x => Regex.Escape(x.ToString()))) + "]"; private static Regex fileNameCleaner = new Regex(fileNameCleanerExpression, RegexOptions.Compiled); public static bool ValidatePath(string path) { return pathValidator.IsMatch(path); } public static bool ValidateFileName(string fileName) { return fileNameValidator.IsMatch(fileName); } public static string CleanPath(string path) { return pathCleaner.Replace(path, ""); } public static string CleanFileName(string fileName) { return fileNameCleaner.Replace(fileName, ""); } } 
11
19 окт. Ceyms 19 oktyabrda verdiyi cavabı 2010-10-19 19:33 '10 at 19:33 2010-10-19 19:33

Yuxarıda göstərilən həllərin əksəriyyəti hər iki yol üçün qeyri-qanuni simvolları və bir səhv olan bir fayl adını birləşdirir (hər iki çağırış hazırda eyni xarakterli dəsti qaytarırsa belə). Birincisi yolda + fayl adını yola və faylın adına ayırırdım, sonra varsa müvafiq dəsti tətbiq etdim, sonra isə ikisini yenidən birləşdirirəm.

wvd_vegt

8
19 июня '12 в 15:16 2012-06-19 15:16 Cavab verilir wvd_vegt 19 iyun '12 saat 15:16 'da 2012-06-19 15:16

Yanlış simvolları tək bir xarakterlə silmək və ya dəyişdirmək, səhvlərlə qarşılaşa bilər:

 <abc -> abc >abc -> abc 

Bunun qarşısını almaq üçün asan bir yoldur:

 public static string ReplaceInvalidFileNameChars(string s) { char[] invalidFileNameChars = System.IO.Path.GetInvalidFileNameChars(); foreach (char c in invalidFileNameChars) s = s.Replace(c.ToString(), "[" + Array.IndexOf(invalidFileNameChars, c) + "]"); return s; } 

Nəticə:

  <abc -> [1]abc >abc -> [2]abc 
6
01 окт. cavab Maxence 01 oct verilir . 2014-10-01 21:40 '14 da 21:40 2014-10-01 21:40

Bir istisna at.

 if ( fileName.IndexOfAny(Path.GetInvalidFileNameChars()) > -1 ) { throw new ArgumentException(); } 
5
12 марта '09 в 19:14 2009-03-12 19:14 cavab 12 mart 09: 00-da saat 19 : 14-mirezus tərəfindən verilir

Mən bu canavarı əyləncəyə yazdım, bu da bir dövrə keçməyə imkan verir:

 public static class FileUtility { private const char PrefixChar = '%'; private static readonly int MaxLength; private static readonly Dictionary<char,char[]> Illegals; static FileUtility() { List<char> illegal = new List<char> { PrefixChar }; illegal.AddRange(Path.GetInvalidFileNameChars()); MaxLength = illegal.Select(x => ((int)x).ToString().Length).Max(); Illegals = illegal.ToDictionary(x => x, x => ((int)x).ToString("D" + MaxLength).ToCharArray()); } public static string FilenameEncode(string s) { var builder = new StringBuilder(); char[] replacement; using (var reader = new StringReader(s)) { while (true) { int read = reader.Read(); if (read == -1) break; char c = (char)read; if(Illegals.TryGetValue(c,out replacement)) { builder.Append(PrefixChar); builder.Append(replacement); } else { builder.Append(c); } } } return builder.ToString(); } public static string FilenameDecode(string s) { var builder = new StringBuilder(); char[] buffer = new char[MaxLength]; using (var reader = new StringReader(s)) { while (true) { int read = reader.Read(); if (read == -1) break; char c = (char)read; if (c == PrefixChar) { reader.Read(buffer, 0, MaxLength); var encoded =(char) ParseCharArray(buffer); builder.Append(encoded); } else { builder.Append(c); } } } return builder.ToString(); } public static int ParseCharArray(char[] buffer) { int result = 0; foreach (char t in buffer) { int digit = t - '0'; if ((digit < 0) || (digit > 9)) { throw new ArgumentException("Input string was not in the correct format"); } result *= 10; result += digit; } return result; } } 
4
07 дек. Johan Larsson tərəfindən verilmiş cavab 07 dekabr 2013-12-07 16:21 '13 saat 16:21 'da 2013-12-07 16:21

Hesab edirəm ki, normal ifadənin istifadəsini yoxlamaq və hər bir pis simvol yoxlamağa yox, hansı simvollara icazə verildiyini göstərmək daha asandır. Aşağıdakı bağlantılara baxın: http://www.c-sharpcorner.com/UploadFile/prasad_1/RegExpPSD12062005021717AM/RegExpPSD.aspx http://www.windowsdevcenter.com/pub/a/oreilly/windows/news/csharp_0101.html

Ayrıca, düzenli ifade editöründe bir axtarış yapın, onlar çox kömək edəcək. Ətrafınızdakılar da sizin üçün C # kodunu çıxardı.

3
28 сент. Cavab Sandor Davidhazi tərəfindən verildi Sep 28 2008-09-28 19:07 '08 at 7:07 pm 2008-09-28 19:07

Burada cavabı ilə tarama, hamısı ** yanlış fayl adlarının char array istifadə ilə bağlı görünür.

Əlbəttə ki, bu, mikro-optimizasiya ola bilər - lakin etibarlı fayl adları üçün çox sayda dəyərləri yoxlaya bilənlər üçün, qüsurlu bir xarakter yaratmaq əhəmiyyətli dərəcədə daha yaxşı nəticələrə səbəb olacağını qeyd etmək lazımdır.

Keçmişdə bir hashset (və ya lüğət) siyahıdan iteration daha çox nə qədər tez sürətlə (şok) idi. Dizələrlə, bu gülünc bir az sayda (yaddaşdan 5-7 ədəd). Çox digər sadə məlumatlarla (obyektlərə, nömrələrə və s. Əlaqələrə) Magic Crossover 20-ə yaxın element kimi görünür.

Path.InvalidFileNameChars siyahısında 40 yanlış simvol var. Bu gün bir axtarış varmı və StackOverflow-da olduqca yaxşı bir test var idi ki, bu hashset 40 element üçün serialın / siyahı müddətinin yarısından çoxunu alacaqlarını göstərir: on123.ru.site/questions/23329 / ...

Yolları dezinfeksiya etmək üçün istifadə etdiyim köməkçi sinif. Niyə əvəzli bir seçim olduğumu unutdum, amma yaxşı bir bonus kimi var.

Əlavə bonus üsulu "IsValidLocalPath" da çox :)

(** normal ifadələrdən istifadə etməyənlər)

 public static class PathExtensions { private static HashSet<char> _invalidFilenameChars; private static HashSet<char> InvalidFilenameChars { get { return _invalidFilenameChars ?? (_invalidFilenameChars = new HashSet<char>(Path.GetInvalidFileNameChars())); } } /// <summary>Replaces characters in <c>text</c> that are not allowed in file names with the /// specified replacement character.</summary> /// <param name="text">Text to make into a valid filename. The same string is returned if /// it is valid already.</param> /// <param name="replacement">Replacement character, or NULL to remove bad characters.</param> /// <param name="fancyReplacements">TRUE to replace quotes and slashes with the non-ASCII characters " and ⁄.</param> /// <returns>A string that can be used as a filename. If the output string would otherwise be empty, "_" is returned.</returns> public static string ToValidFilename(this string text, char? replacement = '_', bool fancyReplacements = false) { StringBuilder sb = new StringBuilder(text.Length); HashSet<char> invalids = InvalidFilenameChars; bool changed = false; for (int i = 0; i < text.Length; i++) { char c = text[i]; if (invalids.Contains(c)) { changed = true; char repl = replacement ?? '\0'; if (fancyReplacements) { if (c == '"') repl = '"'; // U+201D right double quotation mark else if (c == '\'') repl = '''; // U+2019 right single quotation mark else if (c == '/') repl = '⁄'; // U+2044 fraction slash } if (repl != '\0') sb.Append(repl); } else sb.Append(c); } if (sb.Length == 0) return "_"; return changed ? sb.ToString() : text; } /// <summary> /// Returns TRUE if the specified path is a valid, local filesystem path. /// </summary> /// <param name="pathString"></param> /// <returns></returns> public static bool IsValidLocalPath(this string pathString) { // From solution at https://stackoverflow.com/a/11636052/949129 Uri pathUri; Boolean isValidUri = Uri.TryCreate(pathString, UriKind.Absolute, out pathUri); return isValidUri  pathUri != null  pathUri.IsLoopback; } } 
2
08 сент. Daniel Scott tərəfindən verilmiş cavab Sep 08 2017-09-08 03:14 '17 'də 3:14' də 2017-09-08 03:14 'də
 public static class StringExtensions { public static string RemoveUnnecessary(this string source) { string result = string.Empty; string regex = new string(Path.GetInvalidFileNameChars()) + new string(Path.GetInvalidPathChars()); Regex reg = new Regex(string.Format("[{0}]", Regex.Escape(regex))); result = reg.Replace(source, ""); return result; } } 

Metodu açıq şəkildə istifadə edə bilərsiniz.

2
22 февр. cavab 22 fevralda verilir 2018-02-22 14:25 '18 saat 02:25 'da 2018-02-22 14:25

Göründüyü kimi, bu, O (n) və strings üzərində çox yaddaş sərf etmir:

  private static readonly HashSet<char> invalidFileNameChars = new HashSet<char>(Path.GetInvalidFileNameChars()); public static string RemoveInvalidFileNameChars(string name) { if (!name.Any(c => invalidFileNameChars.Contains(c))) { return name; } return new string(name.Where(c => !invalidFileNameChars.Contains(c)).ToArray()); } 
2
10 февр. 10 fevralda Alexey F tərəfindən verilmiş cavab. 2015-02-10 00:19 '15 at 0:19 2015-02-10 00:19
 public static bool IsValidFilename(string testName) { return !new Regex("[" + Regex.Escape(new String(System.IO.Path.GetInvalidFileNameChars())) + "]").IsMatch(testName); } 
1
18 нояб. cavab mbdavis tərəfindən verilir 2013-11-18 16:28 '13 'da 16:28' da 2013-11-18 16:28

Fayl adı Path.GetInvalidPathChars() , +# və digər spesifik adlardan olan simvolları tərk edə bilməz. Bütün çekləri bir sinifə birləşdirdik:

 public static class FileNameExtensions { private static readonly Lazy<string[]> InvalidFileNameChars = new Lazy<string[]>(() => Path.GetInvalidPathChars() .Union(Path.GetInvalidFileNameChars() .Union(new[] { '+', '#' })).Select(c => c.ToString(CultureInfo.InvariantCulture)).ToArray()); private static readonly HashSet<string> ProhibitedNames = new HashSet<string> { @"aux", @"con", @"clock$", @"nul", @"prn", @"com1", @"com2", @"com3", @"com4", @"com5", @"com6", @"com7", @"com8", @"com9", @"lpt1", @"lpt2", @"lpt3", @"lpt4", @"lpt5", @"lpt6", @"lpt7", @"lpt8", @"lpt9" }; public static bool IsValidFileName(string fileName) { return !string.IsNullOrWhiteSpace(fileName)  fileName.All(o => !IsInvalidFileNameChar(o))  !IsProhibitedName(fileName); } public static bool IsProhibitedName(string fileName) { return ProhibitedNames.Contains(fileName.ToLower(CultureInfo.InvariantCulture)); } private static string ReplaceInvalidFileNameSymbols([CanBeNull] this string value, string replacementValue) { if (value == null) { return null; } return InvalidFileNameChars.Value.Aggregate(new StringBuilder(value), (sb, currentChar) => sb.Replace(currentChar, replacementValue)).ToString(); } public static bool IsInvalidFileNameChar(char value) { return InvalidFileNameChars.Value.Contains(value.ToString(CultureInfo.InvariantCulture)); } public static string GetValidFileName([NotNull] this string value) { return GetValidFileName(value, @"_"); } public static string GetValidFileName([NotNull] this string value, string replacementValue) { if (string.IsNullOrWhiteSpace(value)) { throw new ArgumentException(@"value should be non empty", nameof(value)); } if (IsProhibitedName(value)) { return (string.IsNullOrWhiteSpace(replacementValue) ? @"_" : replacementValue) + value; } return ReplaceInvalidFileNameSymbols(value, replacementValue); } public static string GetFileNameError(string fileName) { if (string.IsNullOrWhiteSpace(fileName)) { return CommonResources.SelectReportNameError; } if (IsProhibitedName(fileName)) { return CommonResources.FileNameIsProhibited; } var invalidChars = fileName.Where(IsInvalidFileNameChar).Distinct().ToArray(); if(invalidChars.Length > 0) { return string.Format(CultureInfo.CurrentCulture, invalidChars.Length == 1 ? CommonResources.InvalidCharacter : CommonResources.InvalidCharacters, StringExtensions.JoinQuoted(@",", @"'", invalidChars.Select(c => c.ToString(CultureInfo.CurrentCulture)))); } return string.Empty; } } 

GetValidFileName metodu bütün yanlış məlumatları _ ilə əvəz edir.

1
25 июля '18 в 15:14 2018-07-25 15:14 cavab 25 iyul '18, 15:14 'də 2018-07-25 15:14' a qədər verilir

Mənim sualım artıq tam cavablandırıldığını düşünürəm ... Cavablarda yalnız təmiz fayl adını və ya yolunu təsvir edir ... həm də deyil. İşdə mənim həllim:

 private static string CleanPath(string path) { string regexSearch = new string(Path.GetInvalidFileNameChars()) + new string(Path.GetInvalidPathChars()); Regex r = new Regex(string.Format("[{0}]", Regex.Escape(regexSearch))); List<string> split = path.Split('\\').ToList(); string returnValue = split.Aggregate(string.Empty, (current, s) => current + (r.Replace(s, "") + @"\")); returnValue = returnValue.TrimEnd('\\'); return returnValue; } 
0
07 июля '15 в 12:37 2015-07-07 12:37 cavab Suplanus 07 iyul '15 'də saat 12:37' də verilir

Bir neçə cümlələri birləşdirən bir genişləndirmə metodu yaratdım:

  1. Qabaqcıl simvolların bir yığın dəstəsində saxlanması
  2. Character filtering ascii 127-in altındadır. Path.GetInvalidFileNameChars 0'dan 255'e qədər ascii kodlarını istifadə edərək, istifadə edilən bütün yararsız simvolları daxil etmədikdən sonra baxın. BuradaMSDN
  3. Əvəz xarakter təyin etmək bacarığı

Mənbə:

 public static class FileNameCorrector { private static HashSet<char> invalid = new HashSet<char>(Path.GetInvalidFileNameChars()); public static string ToValidFileName(this string name, char replacement = '\0') { var builder = new StringBuilder(); foreach (var cur in name) { if (cur > 31  cur < 128  !invalid.Contains(cur)) { builder.Append(cur); } else if (replacement != '\0') { builder.Append(replacement); } } return builder.ToString(); } } 
0
14 июня '18 в 10:11 2018-06-14 10:11 cavab 14 iyun '18' də saat 10:11 'də 2018-06-14 10:11' də verilir

Bu, toqquşmaların qarşısını almaq və qarşısını almaq üçün imkan verir.

  static string SanitiseFilename(string key) { var invalidChars = Path.GetInvalidFileNameChars(); var sb = new StringBuilder(); foreach (var c in key) { var invalidCharIndex = -1; for (var i = 0; i < invalidChars.Length; i++) { if (c == invalidChars[i]) { invalidCharIndex = i; } } if (invalidCharIndex > -1) { sb.Append("_").Append(invalidCharIndex); continue; } if (c == '_') { sb.Append("__"); continue; } sb.Append(c); } return sb.ToString(); } 
0
19 сент. Cavab mcintyre321 tərəfindən verilir Sentyabr 19 2014-09-19 18:04 '14 at 18:04 2014-09-19 18:04

Windows fayl adları üçün qeyri-qanuni simvollardan bir simli təmizləmək üçün bir liner:

 public static string CleanIllegalName(string p_testName) => new Regex(string.Format("[{0}]", Regex.Escape(new string(Path.GetInvalidFileNameChars()) + new string(Path.GetInvalidPathChars())))).Replace(p_testName, ""); 
0
02 дек. Cavab Zananok verildi 02 Dek. 2018-12-02 04:49 '18 at 4:49 2018-12-02 04:49

Və ya yalnız edə bilərsiniz

 [YOUR STRING].Replace('\\', ' ').Replace('/', ' ').Replace('"', ' ').Replace('*', ' ').Replace(':', ' ').Replace('?', ' ').Replace('<', ' ').Replace('>', ' ').Replace('|', ' ').Trim(); 
-6
16 янв. Danny Fallasın 16 yanvarda verdiyi cavabı 2014-01-16 00:24 '14 'də 0:24 2014-01-16 00:24

Tags bağlı digər suallar və ya bir sual