Атрибуты файла C # xattr - PullRequest
       14

Атрибуты файла C # xattr

1 голос
/ 26 сентября 2011

Я создаю кроссплатформенное программное обеспечение и хочу узнать, существует ли какой-либо (простой) способ чтения / записи расширенных атрибутов файлов Unix (Mac OSX / Linux) в C #.Я только что прочитал о xattr пространствах имен, но я не нашел никакой информации о реализации C # или привязках этой функции.

PS Единственное, что я нашел до сих пор, это библиотека python-xattr, ноя не хочу его использовать, потому что:

  • Я не хочу обязывать пользователей устанавливать Python (уже существует зависимость от Mono / .NET)
  • Byиспользуя Python, у меня будет снижение производительности (C # компилируется, а Python интерпретируется)
  • Я не хочу полагаться / зависеть от внешних инструментов (если это возможно), потому что это небезопасно

Ответы [ 2 ]

0 голосов
/ 10 января 2014

Я думаю, что Mono.Unix.Native.Syscall.setxattr будет лучшим решением, которое есть в модуле Mono.Posix.

0 голосов
/ 01 октября 2011

Окончательное решение может быть следующим, скажите мне, что вы думаете?

FileAttrsManager - абстрактный класс, используемый для создания 2 производных классов:

  • FileAttrsManagerDos : управление расширенными атрибутами с использованием DSOFile.dll *
  • FileAttrsManagerUnix : управление расширенными атрибутами с использованием IronPython * и python-xattr **

[*] http: \\ www.microsoft.com/download/en/details.aspx?displaylang=en&id=8422
[**] http: \\ ironpython.codeplex.com
[** *] http: \\ pypi.python.org/pypi/xatt

Операция расширенных атрибутов (например, SetPropery(string key, object value) и GetProperty(string key) и т. Д.) Будет управляться в статическом классе ( FileAttrsProvider ), который инициализирует объект FileAttrsManager одним из двух производных типы то есть:

public static class FileAttrProvider
{

    private static FileAttrReader _reader = null;

    public static void Initialize()
    {
        switch (Environment.OSVersion.Platform)
        {
            case PlatformID.MacOSX:
            case PlatformID.Unix:
                _reader = new FileAttrReaderUnix();
                break;
            case PlatformID.Win32NT:
                _reader = new FileAttrReaderDos();
                break;
        }
    }
}

Хотя производный тип зависит от среды, для обеспечения автоматической отправки всех вызовов метода для объекта _reader используется исходный тип.

...