Perché dimensione degli allegati data dalla interfaccia di programmazione di Outlook è sempre sbagliato?
Domanda
Il tentativo di utilizzare Outlook Interop in C #, ho notato una cosa curiosa.
- In primo luogo ho la dimensione di un allegato con Attachment.Size proprietà .
- In secondo luogo, ho salvare l'allegato in un file utilizzando metodo Attachment.SaveAsFile .
Confrontando la dimensione reale di un file salvato e una dimensione data dalla prospettiva, ho notato che il vero, file salvato è sempre più piccolo del previsto da Attachment.Size
. I file salvati sembrano essere validi e non troncato.
I risultati dei campioni http://www.freeimagehosting.net/uploads /224d342eba.png
Quindi, cosa c'è di sbagliato con esso? C'è un bug in Attachment.Size
? O forse ci si aspetta di dare qualcosa di diverso rispetto alla dimensione di un allegato?
ho pensato che converte CR a CRLF, compresi i file binari, che possono spiegare l'overhead, ma alcuni file allegati sono in formato testo crudo con CRLF, quindi questa ipotesi è sbagliata.
prima modifica:
Non è la codifica Base64, perché codifica Base64 potrebbe essere:
- rapporto di 4/3. Nel mio caso, ho un rapporto che non è così lontano da 1.0.
- proporzionale. Non è il caso qui:. Un file di 1,9 MB ha un sovraccarico di 181 byte, mentre un file di 27 KB ha un sovraccarico di 3 KB
Ora, guardando in alto quasi a caso in una gamma di 89 a 3658 byte, sono d'accordo che potrebbe essere alcune intestazioni strane.
Seconda modifica:
Ho provato questo su un insieme più ampio di file. Quello che ho notato è che la differenza tra la dimensione reale del file e la dimensione data dal Outlook:
- è sempre zero per un allegato con estensione msg. Ma l'attaccamento msg è un caso molto speciale e hanno un comportamento molto strano.
- influenzato sia da estensione del file e la lunghezza del nome del file.
- Per la stessa estensione del file, è, nella maggior parte dei casi, ma non sempre , più grande quando la lunghezza del nome del file è più grande.
Ecco un esempio:
alt text http://www.freeimagehosting.net/ uploads / a767d3cacf.png
IMHO, Outlook qualcosa con il nome del file, una sorta di codifica molto strano, forse una generazione di un codice identificativo unico in base a nome del file . Ciò significa che:
- quando il file è più grande, l'identificatore univoco è più grande anche.
- quando collisione accade, qualcosa accade al identificatore univoco, il che rende molto, molto più grande: fila 18 ha lo stesso nome del file di fila 11, ma il file non è lo stesso; d'altra parte, le righe 12, 13 e 14 hanno lo stesso file.
Soluzione
Non sono sicuro, ma mi piacerebbe pensare che potrebbe essere intestazioni MIME e / o codifica in testa. Per ulteriori informazioni, un'occhiata a questo articolo Wiki su Base64 e cercare la parola in testa.
Edit: Mi dispiace, ma non era molto chiaro, volevo dire l'articolo Base64 proprio come un esempio di che ci potrebbe essere generali legati codifica, non è che in realtà era Base64 in quanto, come detto da altri, Base64 in testa sarebbe probabilmente essere molto più grande di quelle differenze.