Как определить размер файла по вложению в сообщение POP3

#c# #.net #file

Вопрос:

Я пишу программу для чтения из почтового ящика POP3 и загрузки сообщения электронной почты в свою систему продажи билетов. Затем я хотел бы взять вложения и загрузить их. У меня есть вся необходимая информация, кроме размера файла.

Есть ли способ определить размер файла по почтовому сообщению? Я беру вложение, декодирую строку в кодировке base64 и разбиваю ее на массив байтов для хранения в базе данных. Если есть другой способ определить размер файла, я тоже готов это попробовать.

Я работаю в C# и .NET 3.5.

Спасибо!!!

Комментарии:

1. Что. Сетевая библиотека, которую вы используете для доступа к POP3?

2. @гимел codeplex.com/csharpmail

Ответ №1:

Является ли размер декодированного массива байтов base64 правильным для вас? Если это так, все, что вам нужно сделать, это рассчитать размер без его расшифровки, верно?

Массив байтов размером N будет кодироваться в (N * 4)/3 байта, всегда округляясь. Вам нужно посмотреть на последние несколько символов строки, чтобы определить, сколько нужно удалить для округления. В принципе, это должно быть что-то вроде:

 string x = GetBase64DataFromWherever();
int size = (x.Length *3)/4;
if (x.EndsWith("="))
{
    size--;
}
if (x.EndsWith("=="))
{
    size--; // 1 will already have been removed by the if statement above
}
 

Это непроверено, но, предположительно, у вас есть хорошие тестовые данные, с которыми вы можете попробовать 🙂

Комментарии:

1. @Jon Skeet — для размера int = (x*3)/4; должно ли это быть x.длина? Спасибо!

2. Без проблем.. Похоже, это довольно хорошо работает для размера файла. Теперь мне нужно выяснить, как заставить эту библиотеку анализировать вложение, но это другой вопрос 🙂 . Спасибо!

3. и я нашел свою другую проблему. Спасибо за помощь.