2016-06-13 2 views
1

Я сочинительство кругозора добавить в Мое приложение получает ссылку на объект и сохраняет его как это:.DocumentItem.SaveAs Сохраняет документ, но, как поврежденный файл

string myFileName = "A.docx"; 
if (myItem is DocumentItem) 
{ 
    var docItem = myItem as DocumentItem; 
    docItem.SaveAs(myFileName); 
} 

Это будет безопасно док-файл слово " A.docx "во временную папку на моей машине.

Однако, когда я дважды щелкаю по файлу, чтобы открыть его, я получу всплывающее окно, сообщающее мне, что файл поврежден и не может быть открыт. Щелчок по ОК в всплывающем меню предлагает восстановить файл, и если я выберу его, файл будет восстановлен и открыт.

Это заставляет меня поверить, что по какой-то причине DocumentItem.SaveAs() работает не так, как ожидалось, и что он сохраняет файл в поврежденном состоянии.

Любая идея, что не так с кодом выше?

ОБНОВЛЕНИЕ И РЕШЕНИЕ: я понял это (благодаря этому сообщению DocumentItem.SaveAs results in corrupted file). Поскольку почта не объясняет, как это сделать, я размещаю свое решение здесь на случай, если кому-то это понадобится.

Вот что я сделал следующее предложение в посте выше:

string myFileName = "A.docx"; 
if (myItem is DocumentItem) 
{ 
    var docItem = myItem as DocumentItem; 
    for (var i = 1; i <= docItem.Attachments.Count; i++) 
    { 
     var attachment = docItem.Attachments[i]; 
     attachment.SafeAsFile(myFileName); 
    } 
} 

Это решило проблему коррупции. Большое спасибо @DmitryStreblechenko

+0

@DavidG Он отображается как «A.docx» в папке, где я его сохраняю. Таким образом, он имеет расширение .docx. Спасибо. – pixel

ответ

1

Я понял это (благодаря этому сообщению DocumentItem.SaveAs результатов в поврежденном файле). Поскольку почта не объясняет, как это сделать, я размещаю свое решение здесь на случай, если кому-то это понадобится.

Вот что я сделал следующее предложение в посте выше:

string myFileName = "A.docx"; 
if (myItem is DocumentItem) 
{ 
    var docItem = myItem as DocumentItem; 
    for (var i = 1; i <= docItem.Attachments.Count; i++) 
    { 
     var attachment = docItem.Attachments[i]; 
     attachment.SafeAsFile(myFileName); 
    } 
} 

Это решило проблему коррупции. Большое спасибо @DmitryStreblechenko

1

Из документации DocumentItem.SaveAs:

Сохраняет элемент Microsoft Outlook по указанному пути и в формате указанного типа файла. Если тип файла не указан, используется формат MSG (.msg).

Таким образом, вы должны использовать расширение .msg, если вы не указали тип. Если вы хотите сохранить формат Word Document, вы должны указать правильный тип из перечисления OlSaveAsType. Обратите внимание, что расширение будет .doc, если вы укажете olDoc так:

string myFileName = "A.doc"; 
... 
docItem.SaveAs(myFileName, OlSaveAsType.olDoc) 
+0

Да, я прочитал это, но файл сохраняется в моей папке как файл A.docx. – pixel

+0

Ну, вы даете ему имя файла, так что, конечно. Вы также можете сохранить его как «a.jpg», но это не откроет его в средстве просмотра изображений. – DavidG

+0

@ DavigG Я понял, обновит свой пост в ближайшее время, если ему это понадобится. Это не проблема с DocumentItem.SaveAs, но с тем фактом, что я уверен, что сохранить элемент документа вместо получения его вложения. – pixel