Поддержите полномочия файла при извлечении из zip-файла с помощью JDK 5 api

Вообще говоря, в языке C struct / union / enum являются макро-инструкциями, обрабатываемыми препроцессором языка C (не путайте с препроцессором, который обрабатывает «#include» и другие)

так:

struct a
{
   int i;
};

struct b
{
   struct a;
   int i;
   int j;
};

struct b расходуется примерно так:

struct b
{
    struct a
    {
        int i;
    };
    int i;
    int j;
}

и поэтому во время компиляции она развивается в стеке примерно так: b: int ai int i int j

, поэтому также трудно иметь самоссылающиеся структуры, цикл препроцессора C в цикле объявления, который не может завершиться.

typedef - это спецификатор типа, что означает, что его обрабатывает только компилятор C, и он может делать то, что хочет для оптимизации реализации кода на ассемблере. Он также не тратит член типа par тупо, как это делает препроцессор со структурами, но использует более сложный алгоритм построения ссылок, поэтому конструкция вроде:

typedef struct a A; //anticipated declaration for member declaration

typedef struct a //Implemented declaration
{
    A* b; // member declaration
}A;

разрешена и полностью функциональна. Эта реализация предоставляет также доступ к преобразованию типов компилятора и устраняет некоторые эффекты ошибок, когда поток выполнения покидает поле приложения функций инициализации.

Это означает, что в C typedefs ближе к классу C ++, чем к одиноким структурам.

19
задан Raymond Kroeker 26 June 2009 в 18:32
поделиться

2 ответа

Look at Apache Commons Compress and look at TarArchiveEntry, that should preserve the file permissions like you want it to.

TarArchiveEntry entry = tarInput.getNextTarEntry();

Here are the javadocs. I think I've gone Commons mad...

1
ответ дан 30 November 2019 в 05:13
поделиться

Я думаю, что на самом деле невозможно правильно сохранить разрешения.

Разрешения очень зависят от ОС: в то время как разрешения для файлов POSIX позволяют пользователю устанавливать, можете ли вы читать, записывать или выполнять файл для владельца файла, группы и других, файловая система NTFS имеет аналогичную систему, но концепция для разрешение на выполнение отсутствует. И ранняя файловая система FAT / FAT32 вообще не имела прав доступа к файлам (часть из атрибута только для чтения).

Поскольку Java является кроссплатформенной, было бы сложно правильно установить разрешения для вновь созданных (разархивированных) файлов в зависимости от базовой ОС ....

Тем не менее, Java 6 имеет новую java.io.File класс , который позволяет вам устанавливать разрешения (с помощью таких методов, как setExecutable (), setReadable () и т. д.)

Это мне очень помогло, особенно setExecutable (), который больше всего беспокоил меня при разархивировании исполняемых файлов в файловой системе Linux. И вам не нужно беспокоиться о том, чтобы выяснить, на какой ОС вы работаете, поскольку этот метод просто ничего не сделает, если он работает под Windows или другими системами без концепции исполняемых файлов.

10
ответ дан 30 November 2019 в 05:13
поделиться
Другие вопросы по тегам:

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