【问题标题】:Test file permissions on Mono在 Mono 上测试文件权限
【发布时间】:2012-09-28 04:25:51
【问题描述】:

我正在使用 Mono 开发跨平台应用程序。我想检查运行应用程序的用户的 RW 访问权限。在 NT 上,我可以使用 .GetAccessControl 方法(在 Mono 上抛出 PlatformNotSupported 异常),但如何处理 *nix 和 MacOS?有没有跨平台解决方案?

【问题讨论】:

    标签: c# mono file-permissions


    【解决方案1】:

    File.GetAttributes(path)

    http://msdn.microsoft.com/en-us/library/system.io.fileattributes.aspx

    信息量不如.GetAccessControl,但可以判断文件是否为ReadOnly

    【讨论】:

      【解决方案2】:

      Mono.Unix 具有 UNIX 特定的实现:

      var ufi = new UnixFileInfo("/tmp/test.cpp");
      ufi.CanAccess(AccessModes.F_OK); // is a file/directory
      ufi.CanAccess(AccessModes.R_OK); // accessible for reading
      ufi.CanAccess(AccessModes.W_OK); // accessible for writing
      ufi.CanAccess(AccessModes.X_OK); // accessible for executing
      FileSpecialAttributes sa = ufi.FileSpecialAttributes; //setuid, setgid and sticky bits
      FileAccessPermissions fa = ufi.FileAccessPermissions;
      

      FileAccessPermissions 定义为:

      [Flags ()]
      public enum FileAccessPermissions {
          UserReadWriteExecute,
          UserRead,
          UserWrite,
          UserExecute,
          GroupReadWriteExecute,
          GroupRead,
          GroupWrite,
          GroupExecute,
          OtherReadWriteExecute,
          OtherRead,
          OtherWrite,
          OtherExecute,
          DefaultPermissions,
          AllPermissions
      }
      

      【讨论】:

      • 谢谢。我假设它不能在 Windows 上运行,或者它可以通过 POSIX 子系统运行?
      • @ViKozh 嗯不确定。你可以试试。 AFAICT 如果它不起作用,它仍然应该是公平的游戏,因为您显然发现 .GetAccessControl 在 *NIX 上不起作用...... 可能与文件系统驱动程序有关(检查(扩展)文件属性是否启用?)
      【解决方案3】:

      尝试为 RW 打开文件并查看它是否成功?

      【讨论】:

      • 谢谢,其实它比什么都简单。我会检查它是否适合我的情况。
      猜你喜欢
      • 2014-03-21
      • 2023-03-17
      • 1970-01-01
      • 2012-06-20
      • 2012-01-18
      • 1970-01-01
      • 2014-09-30
      • 1970-01-01
      • 2016-10-04
      相关资源
      最近更新 更多