Regex.Заменить перегрузку?

1

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

Так что я пытаюсь реализовать, это попытка уловить полосу нелегальных символов. Я вытащил эту информацию с самого веб-сайта Microsoft. Однако, когда я использую Regex.Replace() мне говорят, что он принимает только 5 перегрузок.

Это сбивает с толку, потому что это то, что у меня есть, и я проверил triple, что мой hashedfile1name является переменной типа строки.

Другая проблема заключается в том, что для try поймать его говорит мне, что он не знает, что такое RegexMatchTimeoutException. Но больше нет импорта/использования заявлений в Microsoft.

try
{
    FileUpload1.SaveAs("C:\\direct\\uploads\\" + FileUpload1.FileName);
    using (fs = File.OpenRead("C:\\direct\\uploads\\" + FileUpload1.FileName))
    {
        byte[] bytes = new byte[fs.Length];
        fs.Read(bytes, 0, Convert.ToInt32(fs.Length));
        hashedfile1name = Convert.ToBase64String(hash.ComputeHash(bytes));
    }
    try
    {
        Regex.Replace(hashedfile1name, @"[^\w\.@-]", "", RegexOptions.None, TimeSpan.FromSeconds(1.5));
    }
    catch (RegexMatchTimeoutException)
    {
        hashedfile1name = "";
    }
    FileUpload1.SaveAs("C:\\direct\\uploads\\" + hashedfile1name);
    File.Delete("C:\\direct\\uploads\\" + FileUpload1.FileName);

    Label1.Text = "File name: " + FileUpload1.PostedFile.FileName + " - " + hashedfile1name;
}
catch (Exception ex)
{
    Label1.Text = "ERROR: " + ex.Message.ToString();
}
Теги:

1 ответ

2
Лучший ответ

Regex.Replace не заменяет на месте; он возвращает замену как строку. Сегмент:

try
{
    Regex.Replace(hashedfile1name, @"[^\w\.@-]", "", RegexOptions.None, TimeSpan.FromSeconds(1.5));
}
catch (RegexMatchTimeoutException)
{
    hashedfile1name = "";
}

Можно заменить просто:

hashedfile1name = Regex.Replace(hashedfile1name, @"[^\w\.@-]", "");

Затем ваш код должен функционировать должным образом.

(Если вы хотите сохранить весь хэш, вы можете рассмотреть кодировку Base-32, которая похожа на base64, но использует только буквенно-цифровые символы..NET не включает методы Base32, но реализация предоставляется в ответе Shane здесь. )

Ещё вопросы

Сообщество Overcoder
Наверх
Меню