const
применение к методу означает, что указатель this
, то есть указатель на экземпляр, на котором работает метод, равен const
. Это означает, что он не может модифицировать поля и может вызывать только const
методы для него , но не вообще.
Вызов свободной функции вполне допустим, или даже вызов метода, не относящегося к const
, к другому объекту того же класса, если такой объект не const
.
Как насчет этого:
string filename = BitConverter.ToString(yourMD5ByteArray);
Если вы предпочитаете более короткое имя файла без дефисов, тогда вы можете просто использовать:
string filename =
BitConverter.ToString(yourMD5ByteArray).Replace("-", string.Empty);
Как отметил комментатор - обычная кодировка base 64 может содержать символ '/', что, несомненно, будет проблемой с именами файлов. Тем не менее, есть и другие символы, которые можно использовать, например, подчеркивание - просто замените все '/' на подчеркивание.
string filename = Convert.ToBase64String(md5HashBytes).Replace("/","_");
Технически использовать Base64 плохо, если это Windows, имена файлов нечувствительны к регистру (по крайней мере в представлении исследователей) .. но в base64 «a» отличается от «A», это означает, что, возможно, это маловероятно, но в итоге вы столкнетесь с еще более высокой частотой столкновений.
Лучшей альтернативой является шестнадцатеричный код, такой как класс bitconverter, или, если вы можете использовать base32 кодирование (которое после удаления отступов из base64 и base32, а также в случае 128-битного файла даст вам имена файлов одинаковой длины).
Попробуйте это:
Guid guid = new Guid(md5HashBytes);
string hashString = guid.ToString("N");
// format: xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx
string hashString = guid.ToString("D");
// format: xxxxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx
string hashString = guid.ToString("B");
// format: {xxxxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx}
string hashString = guid.ToString("P");
// format: (xxxxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx)