3

私はクロスプラットフォーム ソフトウェアを作成しています。C# で Unix (Mac OSX/Linux) 拡張ファイル属性を読み書きする (簡単な) 方法があるかどうかを知りたいです。名前空間について読んだばかりですxattrが、この機能の C# 実装またはバインディングに関する情報は見つかりませんでした。

PS これまでに見つけたのは python-xattr ライブラリだけですが、次の理由から使用したくありません。

  • ユーザーに Python のインストールを義務付けたくありません (対処すべき Mono/.NET 依存関係が既に存在します)
  • Python を使用すると、パフォーマンスが低下します (C# はコンパイルされますが、Python は解釈されます)。
  • 安全ではないため、(可能であれば) 外部ツールに依存/依存したくない
4

3 に答える 3

0

最終的な解決策は次のようになるかもしれません。どう思いますか?

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オブジェクトを次の 2 つの派生型のいずれかに初期化します。

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 オブジェクトに対するすべてのメソッド呼び出しの自動ディスパッチを確実にするために元の型が使用されます)。

于 2011-10-01T16:40:25.977 に答える