Существует ли способ сделать строковый путь к файлу безопасным в c#?

Быстрый совет, который меня опрокинул: если вы ссылаетесь на компоновщик как «gcc» или «g ++», то использование «--start-group» и «--end-group» не будет передавать эти параметры до линкера - и не будет отмечена ошибка.

Вам нужно записать их как «-Wl, - start-group» и т. Д., Чтобы сообщить GCC передать аргумент через к компоновщику.

84
задан Martin Doms 2 December 2008 в 06:00
поделиться

4 ответа

Тьфу, я ненавижу его, когда люди пытаются предположить, какие символы допустимы. Помимо того, чтобы быть абсолютно непортативным (всегда думающий о Моно), оба из более ранних комментариев пропустили больше 25 недопустимых символов.

'Clean just a filename
Dim filename As String = "salmnas dlajhdla kjha;dmas'lkasn"
For Each c In IO.Path.GetInvalidFileNameChars
    filename = filename.Replace(c, "")
Next

'See also IO.Path.GetInvalidPathChars
163
ответ дан AeroX 5 November 2019 в 16:09
поделиться

Я соглашаюсь с Grauenwolf и настоятельно рекомендовал бы Path.GetInvalidFileNameChars()

, Вот мой вклад C#:

string file = @"38?/.\}[+=n a882 a.a*/|n^%$ ad#(-))";
Array.ForEach(Path.GetInvalidFileNameChars(), 
      c => file = file.Replace(c.ToString(), String.Empty));

p.s. - это более загадочно, чем это должно быть - я пытался быть кратким.

22
ответ дан Aaron Wagner 5 November 2019 в 16:09
поделиться

Если вы хотите быстро вырезать все специальные символы, которые иногда более удобочитаемы для имен файлов, это прекрасно работает:

string myCrazyName = "q`w^e!r@t#y$u%i^o&p*a(s)d_f-g+h=j{k}l|z:x\"c<v>b?n[m]q\\w;e'r,t.y/u";
string safeName = Regex.Replace(
    myCrazyName,
    "\W",  /*Matches any nonword character. Equivalent to '[^A-Za-z0-9_]'*/
    "",
    RegexOptions.IgnoreCase);
// safeName == "qwertyuiopasd_fghjklzxcvbnmqwertyu"
6
ответ дан 24 November 2019 в 08:24
поделиться

Вот функция, которую я использую сейчас (спасибо jcollum за пример C #):

public static string MakeSafeFilename(string filename, char replaceChar)
{
    foreach (char c in System.IO.Path.GetInvalidFileNameChars())
    {
        filename = filename.Replace(c, replaceChar);
    }
    return filename;
}

Я просто поместил ее в класс «Helpers» для удобства.

11
ответ дан 24 November 2019 в 08:24
поделиться
Другие вопросы по тегам:

Похожие вопросы: