2011-09-26 3 views
1

크로스 플랫폼 소프트웨어를 만들고 있는데 C#의 Unix (Mac OSX/Linux) 확장 파일 속성을 읽고 쓸 수있는 쉬운 방법이 있는지 알고 싶습니다. 방금 ​​xattr 네임 스페이스에 대해 읽었지만 C# 구현 또는이 기능의 바인딩에 대한 정보를 찾지 못했습니다.C# xattr 파일 속성

P. 이미 모노가/.NET

  • 내가 파이썬 (설치하는 사용자를 의무화하고 싶지 않은 : 나는 지금까지 발견 된 유일한 방법은 파이썬에서 xattr 라이브러리입니다,하지만 난 때문에 그것을 사용하지 않으 의존성)
  • 파이썬을 사용하면 성능이 저하됩니다 (파이썬이 해석되는 동안 C#이 컴파일 됨)
  • 외부 도구에 의존하고 싶지는 않지만 의존하고 싶습니다. 안전하지 않음
+0

종종 외부 라이브러리를 사용하는 것이 버그를 거의 발생시키지 않는다는 의미에서 직접 작성하는 것보다 훨씬 안전합니다. 아니면 "안전함"으로 다른 것을 의미 했습니까? – svick

+0

@svick 나는 그가 안전하다는 의미가 무엇인지 생각한다. C#은 관리되는 언어이며 파이썬은 그렇지 않습니다. – thekip

+0

@thekip이 맞습니다. 완전히 관리되는 코드와 동질성있는 개발 환경을 원합니다. 저는 이미 C#을 접착제로 사용하고 있습니다 : HTTP5 + jQuery + JSON app (xulrunner에서 실행), 원시 C# 코드, SQLite/MySQL 래퍼 엔티티 공급자 등 일부 다른 (관리되지 않는) 언어와 도구를 확실히 추가하면 내 앱을 좀더 안정적으로 만들지 마라. – Salaros

답변

0

최종 해결책은 다음과 같을 수 있습니다. 어떻게 생각하십니까? * IronPython의를 사용하여 고급 속성을 관리합니다

  • FileAttrsManagerDos :

    FileAttrsManager 2 개 파생 클래스를 만드는 데 사용되는 추상 클래스입니다 dsofile.dll에 *

  • FileAttrsManagerUnix을 사용하여 고급 속성을 관리 및 파이썬 xattr **

[*] http : \\ www.micros oft.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)로) 정적 클래스 두 가지 파생 형으로 FileAttrsManager 객체를 초기화 (FileAttrsProvider)에서 관리 될 것이다 즉 :

public static class FileAttrProvider 
{ 

private static FileAttrReader _reader = null; 

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

유도 된 유형은 환경에 따라 다르며, 원래 유형은 _reader 객체를 호출하는 모든 메소드의 자동 디스패치를 ​​보장하기 위해 사용됩니다.

0

Mono.Unix.Native.Syscall.setxattr은 Mono.Posix 모듈에있는 더 나은 솔루션이라고 생각합니다.