Джейкоб Экспорт изображений контактов Outlook (Java, Jacob)

Доброе утро,

Я использую Jacob 1.17, чтобы прочитать все мои изображения контактов Outlook и сохранить их в файл. Процедура работает довольно хорошо для первых 199 Contatcs. После этого Dispatch.call терпит неудачу и завершается со следующим Исключением:

Exception in thread "main" com.jacob.com.ComFailException: Invoke of: SaveAsFile
Source: Microsoft Outlook
Description: Cannot save the attachment. Cannot create file: ContactPicture.jpg.
Right-click the folder you want to create the file in, and then click Properties on
the shortcut menu to check your permissions for the folder.

    at com.jacob.com.Dispatch.invokev(Native Method)
    at com.jacob.com.Dispatch.invokev(Dispatch.java:625)
    at com.jacob.com.Dispatch.callN(Dispatch.java:453)
    at com.jacob.com.Dispatch.call(Dispatch.java:541)
    at outlookStuff.ManageContactsOutlook.tmpTest(ManageContactsOutlook.java:217)
    at mainPackage.Main.main(Main.java:32)

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

Часть кода, которая создает проблему:

public void tmpTest(int intOutlookFolder, String strWorkingDir) {
Dispatch dipNamespace = this.axc.getProperty("Session").toDispatch();
Dispatch dipContactsFolder = Dispatch.call(dipNamespace, "GetDefaultFolder", (Object) new Integer(intOutlookFolder)).toDispatch();
Dispatch dipContactItems = Dispatch.get(dipContactsFolder, "items").toDispatch();

    @SuppressWarnings("deprecation")
    int count = Dispatch.call(dipContactItems, "Count").toInt();

    for (int i=1; i<=count; i++) {
        Dispatch dipContact;            
        dipContact = Dispatch.call(dipContactItems, "Item", new Integer(i)).toDispatch();

        String strEntryID = Dispatch.get(dipContact, "EntryID").toString().trim();

        //For Testing
        Status.printStatusToConsole("Outlook Contact "+strEntryID+" loaded");

        byte[] byteContactPicture = null;
        String strPathToTmpPicture = null;
        Dispatch dipAttachments = Dispatch.get(dipContact, "Attachments").toDispatch();
        @SuppressWarnings("deprecation")
        int countAttachements = Dispatch.call((Dispatch) dipAttachments, "Count").toInt();
        for (int j=1; j<=countAttachements; j++) {
            Dispatch currentAttachement;            
            currentAttachement = Dispatch.call(dipAttachments, "Item", new Integer(j)).toDispatch();

            if (Dispatch.get(currentAttachement, "FileName").toString().equals("ContactPicture.jpg")) {                 
                strPathToTmpPicture = strWorkingDir+strEntryID+".jpg";

                //The Crashing Part
                Dispatch.call(currentAttachement, "SaveAsFile", strPathToTmpPicture);

                File tmpFile = new File(strPathToTmpPicture);
                if (tmpFile.exists()) {
                    try {
                        byteContactPicture = org.apache.commons.io.FileUtils.readFileToByteArray(tmpFile);
                    } catch (IOException e) {
                        e.printStackTrace();
                    }
                }
                currentAttachement = null;
                tmpFile = null;
            }
            currentAttachement = null;
        }
        dipAttachments = null;
    }
    dipContactItems = null;
    dipContactsFolder = null;
    dipNamespace = null;
}

Может у кого-нибудь есть идея?

Спасибо авиация

0 ответов

Другие вопросы по тегам