Где я могу получить Активную Библиотеку шаблонов?

Это были две основные причины для поврежденного файла.

  • Закройте соединения. Я использовал блок finally, чтобы убедиться, что соединение будет закрыто.
  • Убедитесь, что путь к файлу указан правильно, и получите файл для ZipEntry

Вот решение.

public String createZipfile(User user,MultipartFile[] uploadingFiles,String name,String category) throws Exception
    {
        List<String> srcFiles = new ArrayList<String>();
        Date localDateTime = new Date();
        System.out.println(localDateTime.toString().replaceAll(":", ""));
        LocalTime time = LocalTime.now();
        String filetime = (localDateTime.toString().replaceAll(":", ".")).replaceAll("IST ", ""); //time.toString().replaceAll(":", ".");
        String finalFileName = category+"_"+name+"_"+user.getName()+"_"+filetime+".zip";

        try 
        {           
            FileOutputStream fos = new FileOutputStream("F:\\FolderName\\FolderName\\Test\\"+finalFileName);
            ZipOutputStream zipOut = new ZipOutputStream(fos);
            try 
            {   
                int i=0;
                for(MultipartFile uploadFile:uploadingFiles)
                {       
                    srcFiles.add(i, uploadingFiles[i].getOriginalFilename());

                    java.io.File convFile = new java.io.File(uploadingFiles[i].getOriginalFilename());
                    convFile.createNewFile(); 
                    byte[] b;
                    b = uploadingFiles[i].getBytes();                   

                    java.io.File fileToZip = new java.io.File(convFile.toString());
                    FileInputStream fis = new FileInputStream(fileToZip);

                    ZipEntry zipEntry = new ZipEntry(uploadingFiles[i].getOriginalFilename());
                    zipOut.putNextEntry(zipEntry);
                    byte[] bytes = uploadingFiles[i].getBytes();
                    zipOut.write(bytes, 0, uploadingFiles[i].getBytes().length);

                    fis.close();
                    zipOut.closeEntry();
                    i++;
                }       
           } 
            catch (IOException e) {
                e.printStackTrace();
                throw new Exception("File Zipping Error");
            }
            finally {
                zipOut.finish();
                zipOut.flush();
                zipOut.close();
                fos.close();
            }
        }
        catch (Exception e) {
            throw new Exception("File Upload Error");
        }

        return finalFileName;
    }
8
задан JCL 17 April 2009 в 21:00
поделиться

4 ответа

Как указал Дэн они распространяются вместе с Visual Studio.

Если у вас нет Visual Studio,

3
ответ дан 5 December 2019 в 15:26
поделиться

Это часть Microsoft Visual Studio (но не Express Edition .)

4
ответ дан 5 December 2019 в 15:26
поделиться

Я думаю, что вам нужно иметь копию Visual Studio 2005 или 2008 (не Express), чтобы получить ATL. Если у вас установлена ​​одна из них, но у вас нет ATL, перейдите в «Панель управления: Установка и удаление программ» и выполните установку «Изменить» (с программным компакт-диском или DVD-дисководом в дисководе) и убедитесь, что флажок установлен. для ATL проверяется.

3
ответ дан 5 December 2019 в 15:26
поделиться

Что касается учебников :

Я не нашел действительно хорошего онлайн. При использовании ATL / COM есть несколько хороших страниц:

  • Активная библиотека шаблонов делает Создание компактных COM-объектов Радость Дона Бокса (ветеран-гуру COM). Эта статья начинается: «Я люблю COM. COM это хорошо. Как хороший пилснер или эль, COM никогда не разочаровывает. В На самом деле, чем больше я смотрю на COM, тем больше мне это нравится. К сожалению работаю в C ++, и C ++ не разделяет мои благодарность за прекрасные вещи в жизнь ". Несмотря на гроссмейстерские прозелитизм, и тот факт, что это 12 лет сейчас, это очень хорошо статья ...
  • Отличный учебник Майка Данна по COM на CodeProject.
  • DevGuy's C ++ COM Tips - своего рода мешанина ссылок и предложений.
  • Поваренная книга программиста COM - эта древняя (1995) статья неплоха , несмотря на его возраст и тот факт, что он описывает реализацию COM-объектов в C, а не в C ++ (явные vtables!)

Я немного подзабыл с w / COM и ATL, но если я правильно помню, классы, которые вы вам захочется узнать, что вы будете использовать чаще всего (особенно если вы используете чужие COM-объекты, а не реализуете свои собственные) - CComBSTR, CComPtr и CComVariant. Кроме того, оператор #import в Visual C ++ значительно упрощает использование внешних объектов COM, он генерирует класс интеллектуальных указателей для вас из внешней DLL или EXE-файла.

Если вы собираетесь реализовывать объекты COM, Я настоятельно рекомендую получить копию ATL Internals (сейчас выходит более новая редакция, охватывающая ATL v8). Да, в некоторых разделах речь идет о мрачных подробностях, но даже в качестве вступительной книги она довольно хорошо написана.

Если вы никогда раньше не использовали COM, то «классические» книги Essential COM и Эффективные COM очень хороши, и вы, вероятно, можете получить их недорого из ваших любимых источников подержанных книг. Вам также захочется быть знакомым с идиомой RAII , если вы еще этого не сделали.

Группа новостей microsoft.public.vc.atl очень хороша задавать конкретные вопросы. (хотя, как правило, они более грубые, чем в StackOverflow)

Осторожно: с COM есть много маленьких ошибок, хотя ATL помогает ему стать намного легче и без большого количества раздувания. Техника «симулированного динамического связывания», известная как CRTP , полезна в мире C ++, не только в контексте ATL / COM, но особенно, если вы разрабатываете библиотеку классов многократного использования, которые вы хотите создать в подклассе или смешать в ситуации, когда одновременно присутствует только один экземпляр (например, класс CSpiffyFramework, который предоставляет смешанную функциональность, которую вы хотите многократно использовать, и у вас есть производный класс, который вы хотите включить эту функциональность, и он не является частью модели виртуальных объектов так что вам действительно не нужен vtable).

Удачи!

2
ответ дан 5 December 2019 в 15:26
поделиться
Другие вопросы по тегам:

Похожие вопросы: