Быстрый совет, который меня опрокинул: если вы ссылаетесь на компоновщик как «gcc» или «g ++», то использование «--start-group» и «--end-group» не будет передавать эти параметры до линкера - и не будет отмечена ошибка.
Вам нужно записать их как «-Wl, - start-group» и т. Д., Чтобы сообщить GCC передать аргумент через к компоновщику.
Тьфу, я ненавижу его, когда люди пытаются предположить, какие символы допустимы. Помимо того, чтобы быть абсолютно непортативным (всегда думающий о Моно), оба из более ранних комментариев пропустили больше 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
Я соглашаюсь с 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. - это более загадочно, чем это должно быть - я пытался быть кратким.
Если вы хотите быстро вырезать все специальные символы, которые иногда более удобочитаемы для имен файлов, это прекрасно работает:
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"
Вот функция, которую я использую сейчас (спасибо 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» для удобства.