поэтому у меня есть следующий код, который генерирует хэш файл 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();
}
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 здесь. )