2008-10-10 5 views
2

J'écris un programme pour lire à partir d'une boîte aux lettres POP3 et télécharger le message électronique dans mon système de ticketing. Je voudrais ensuite prendre les pièces jointes et les télécharger aussi. J'ai toutes les informations dont j'ai besoin, sauf la taille du fichier.Comment déterminer la taille d'un fichier à partir d'une pièce jointe à un message POP3

Existe-t-il un moyen de déterminer la taille du fichier à partir du message électronique? Je prends la pièce jointe, en décodant la chaîne encodée en base64 et en la décomposant en un tableau d'octets pour la stocker dans la base de données. S'il y a une autre façon de déterminer la taille du fichier, je suis prêt à essayer aussi.

Je travaille en C# et .NET 3.5.

Merci !!!

+0

Quelle bibliothèque .NET utilisez-vous pour l'accès POP3? – gimel

+0

@gimel http://www.codeplex.com/csharpmail –

Répondre

4

La taille du tableau d'octets décodé en base64 est-elle correcte pour vous? Si oui, tout ce que vous devez faire est de calculer la taille sans le décoder, non? Un tableau d'octets de taille N codera en (N * 4)/3 octets, arrondissant toujours. Vous devez regarder les derniers caractères de la chaîne pour déterminer le montant à supprimer pour arrondir. Fondamentalement, il devrait être quelque chose comme:

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 
} 

Ce n'est pas testé, mais on peut supposer que vous avez de bonnes données de test, vous pouvez l'essayer avec :)

+0

@Jon Skeet - pour la taille int = (x * 3)/4; devrait-il être x.length? Merci! –

+0

Yup, c'est ce que je voulais dire - désolé! Éditera. –

+0

Pas de problème .. Cela semble fonctionner plutôt bien pour la taille du fichier. Maintenant, je dois trouver comment obtenir cette bibliothèque analyse la pièce jointe, mais c'est une autre question :). Merci! –

Questions connexes