使用 .NET Core 的 Linux/Unix 上的文件权限

2024-02-29

我正在尝试学习如何使用 .NET Core 在 Linux/Unix 上设置文件权限。我已经在这里发现了一个问题,它指出了 System.IO.FileSystem 的方向,但我似乎找不到任何有关如何使用它的文档。

简而言之,我想从仅在 Linux 上运行的 .NET Core 应用程序 chmod 文件 644,但不知道如何继续。


目前,.NET Core 中没有为此构建的 API。然而,.NET Core 团队正在努力使Mono.Posix可在 .NET Core 上使用。这公开了 API 以在托管代码中执行此类操作。看https://github.com/dotnet/corefx/issues/15289 https://github.com/dotnet/corefx/issues/15289 and https://github.com/dotnet/corefx/issues/3186 https://github.com/dotnet/corefx/issues/3186。您可以在此处尝试此 API 的早期版本:https://www.nuget.org/packages/Mono.Posix.NETStandard/1.0.0-beta1 https://www.nuget.org/packages/Mono.Posix.NETStandard/1.0.0-beta1

    var unixFileInfo = new Mono.Unix.UnixFileInfo("test.txt");
    // set file permission to 644
    unixFileInfo.FileAccessPermissions =
        FileAccessPermissions.UserRead | FileAccessPermissions.UserWrite
        | FileAccessPermissions.GroupRead
        | FileAccessPermissions.OtherRead;

如果您不想使用 Mono.Posix,您可以通过调用本机代码来实现相同的功能。使用 P/Invoke,您可以调用chmod函数来自libc. See man 2 chmod有关本机 API 的更多详细信息。

using System;
using System.IO;
using System.Runtime.InteropServices;
using static System.Console;

class Program
{
    [DllImport("libc", SetLastError = true)]
    private static extern int chmod(string pathname, int mode);

    // user permissions
    const int S_IRUSR = 0x100;
    const int S_IWUSR = 0x80;
    const int S_IXUSR = 0x40;

    // group permission
    const int S_IRGRP = 0x20;
    const int S_IWGRP = 0x10;
    const int S_IXGRP = 0x8;

    // other permissions
    const int S_IROTH = 0x4;
    const int S_IWOTH = 0x2;
    const int S_IXOTH = 0x1;

    static void Main(string[] args)
    {
        WriteLine("Setting permissions to 0755 on test.sh");
        const int _0755 =
            S_IRUSR | S_IXUSR | S_IWUSR
            | S_IRGRP | S_IXGRP
            | S_IROTH | S_IXOTH;
        WriteLine("Result = " + chmod(Path.GetFullPath("test.sh"), (int)_0755));

        WriteLine("Setting permissions to 0644 on sample.txt");
        const int _0644 =
            S_IRUSR | S_IWUSR
            | S_IRGRP
            | S_IROTH;
        WriteLine("Result = " + chmod(Path.GetFullPath("sample.txt"), _0644));

        WriteLine("Setting permissions to 0600 on secret.txt");
        const int _0600 = S_IRUSR | S_IWUSR;
        WriteLine("Result = " + chmod(Path.GetFullPath("secret.txt"), _0600));
    }
}
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

使用 .NET Core 的 Linux/Unix 上的文件权限 的相关文章

  • 如何连接重叠的圆圈?

    我想在视觉上连接两个重叠的圆圈 以便 becomes 我已经有部分圆的方法 但现在我需要知道每个圆的重叠角度有多大 但我不知道该怎么做 有人有主意吗 Phi ArcTan Sqrt 4 R 2 d 2 d HTH Edit 对于两个不同的半
  • ASP.NET Core 3.1登录后如何获取用户信息

    我试图在登录 ASP NET Core 3 1 后获取用户信息 如姓名 电子邮件 id 等信息 这是我在登录操作中的代码 var claims new List
  • 如何获取 EF 中与组合(键/值)列表匹配的记录?

    我有一个数据库表 其中包含每个用户 年份组合的记录 如何使用 EF 和用户 ID 年份组合列表从数据库获取数据 组合示例 UserId Year 1 2015 1 2016 1 2018 12 2016 12 2019 3 2015 91
  • C# - 当代表执行异步任务时,我仍然需要 System.Threading 吗?

    由于我可以使用委托执行异步操作 我怀疑在我的应用程序中使用 System Threading 的机会很小 是否存在我无法避免 System Threading 的基本情况 只是我正处于学习阶段 例子 class Program public
  • 为什么这个字符串用AesCryptoServiceProvider第二次解密时不相等?

    我在 C VS2012 NET 4 5 中的文本加密和解密方面遇到问题 具体来说 当我加密并随后解密字符串时 输出与输入不同 然而 奇怪的是 如果我复制加密的输出并将其硬编码为字符串文字 解密就会起作用 以下代码示例说明了该问题 我究竟做错
  • VB.NET 中的静态方法实现

    我很困惑Static在 VB NET 中的实现 在 C 中 我们可以创建静态类和静态方法来为我们的应用程序编写实用方法 现在 VB NET 让我们创建Module代替静态类 如果我们在模块中创建一个方法 默认情况下它会变成静态的 但在我的应
  • C# xml序列化必填字段

    我需要将一些字段标记为需要写入 XML 文件 但没有成功 我有一个包含约 30 个属性的配置类 这就是为什么我不能像这样封装所有属性 public string SomeProp get return someProp set if som
  • C 编程:带有数组的函数

    我正在尝试编写一个函数 该函数查找行为 4 列为 4 的二维数组中的最大值 其中二维数组填充有用户输入 我知道我的主要错误是函数中的数组 但我不确定它是什么 如果有人能够找到我出错的地方而不是编写新代码 我将不胜感激 除非我刚去南方 我的尝
  • 如何在当前 Visual Studio 主机内的 Visual Studio 扩展中调试使用 Roslyn 编译的代码?

    我有一个 Visual Studio 扩展 它使用 Roslyn 获取当前打开的解决方案中的项目 编译它并从中运行方法 程序员可以修改该项目 我已从当前 VisualStudioWorkspace 成功编译了 Visual Studio 扩
  • C# 动态/expando 对象的深度/嵌套/递归合并

    我需要在 C 中 合并 2 个动态对象 我在 stackexchange 上找到的所有内容仅涵盖非递归合并 但我正在寻找能够进行递归或深度合并的东西 非常类似于jQuery 的 extend obj1 obj2 http api jquer
  • 为什么使用小于 32 位的整数?

    我总是喜欢使用最小尺寸的变量 这样效果就很好 但是如果我使用短字节整数而不是整数 并且内存是 32 位字可寻址 这真的会给我带来好处吗 编译器是否会做一些事情来增强内存使用 对于局部变量 它可能没有多大意义 但是在具有数千甚至数百万项的结构
  • 复制目录下所有文件

    如何将一个目录中的所有内容复制到另一个目录而不循环遍历每个文件 你不能 两者都不Directory http msdn microsoft com en us library system io directory aspx nor Dir
  • 如何实例化 ODataQueryOptions

    我有一个工作 简化 ODataController用下面的方法 public class MyTypeController ODataController HttpGet EnableQuery ODataRoute myTypes pub
  • 为什么C++代码执行速度比java慢?

    我最近用 Java 编写了一个计算密集型算法 然后将其翻译为 C 令我惊讶的是 C 的执行速度要慢得多 我现在已经编写了一个更短的 Java 测试程序和一个相应的 C 程序 见下文 我的原始代码具有大量数组访问功能 测试代码也是如此 C 的
  • C++ 中的 include 和 using 命名空间

    用于使用cout 我需要指定两者 include
  • 当文件流没有新数据时如何防止fgets阻塞

    我有一个popen 执行的函数tail f sometextfile 只要文件流中有数据显然我就可以通过fgets 现在 如果没有新数据来自尾部 fgets 挂起 我试过ferror and feof 无济于事 我怎样才能确定fgets 当
  • C++ 中的参考文献

    我偶尔会在 StackOverflow 上看到代码 询问一些涉及函数的重载歧义 例如 void foo int param 我的问题是 为什么会出现这种情况 或者更确切地说 你什么时候会有 对参考的参考 这与普通的旧参考有何不同 我从未在现
  • C# 使用“?” if else 语句设置值这叫什么

    嘿 我刚刚看到以下声明 return name null name NA 我只是想知道这在 NET 中叫什么 是吗 代表即然后执行此操作 这是一个俗称的 条件运算符 三元运算符 http en wikipedia org wiki Tern
  • DotNetZip:如何提取文件,但忽略zip文件中的路径?

    尝试将文件提取到给定文件夹 忽略 zip 文件中的路径 但似乎没有办法 考虑到其中实现的所有其他好东西 这似乎是一个相当基本的要求 我缺少什么 代码是 using Ionic Zip ZipFile zf Ionic Zip ZipFile
  • 指针和内存范围

    我已经用 C 语言编程有一段时间了 但对 C 语言还是很陌生 有时我对 C 处理内存的方式感到困惑 考虑以下有效的 C 代码片段 const char string void where is this pointer variable l

随机推荐

  • 如何编译由多个文件组成的Go程序?

    我有一个小程序 由三个文件组成 所有文件都属于同一个包 main 但当我这样做时go build main go构建不成功 当它只是一个文件时 main go 一切正常 现在我花了一些功夫来分离代码 看起来编译器无法找到从中取出的内容mai
  • 从右到左方向按钮尺寸的不相关变化

    我将 9 个 jbutton 添加到 jpanel 中 并将面板添加到 jscrollpane 中 并将其添加到 jframe 中 http www pic1 iran forum ir images up9 954263236836585
  • 使用动态库进行 Objective C Method Swizzling

    我正在尝试学习方法调整 我在 Objective C 中创建了一个程序 它只调用其类中的一个方法 现在我正在尝试使用 DYLD INSERT LIBRARIES 加载动态库 以便我可以使用动态库中定义的新方法覆盖我的方法实现 目的是修改参数
  • 如何使用“concurrent.futures.ProcessPoolExecutor”取消长时间运行的子进程?

    你可以看到完整的here https github com traverseda rratbot blob master main py L35 我的代码的简化版本如下 executor ProcessPoolExecutor 10 try
  • 如何在 pl/sql 中的另一个游标的 select 语句中使用游标中的变量

    我想运行一个查询 获取结果 然后使用第二个语句 光标 中第一个语句的值与另一个 select 语句迭代该查询的结果 我的数据库中有 40 个用户 所有用户都具有相同的数据库模式结构 我想通过以下方式获取用户名 SELECT distinct
  • 在 PowerShell 中使用 StreamWriter 附加到文件

    我创建了一个 PowerShell 脚本 该脚本使用 StreamWriter 将 Windows 中文件夹的权限结果写入 CSV 文件 目前 该脚本为每个文件夹创建一个新文件 我的问题是 StreamWriter 是否可以附加到文件而不是
  • FirebaseCore 词法或预处理器问题

    所以我在使用 firebase 编译我的项目时遇到了问题 这个问题是在我更新所有 firebase pod 后开始的 自从我更新了 pod 后 我就一直收到此错误 词法或预处理器问题 然后当我转到错误是什么时 它说这个 找不到 Google
  • 对 kafka 消费者进行负载测试

    我试图弄清楚如何对卡夫卡消费者进行负载测试 在我的应用程序中 消费者从 kafka 读取消息并做了很多工作 其中大部分是在数据库中写入内容 由于这对我的团队来说是一个重要的过程 因此我希望能够对消费者进行负载测试 并能够获得一些有关消费情况
  • 将多行合并为一行以替换列中的空值

    如何将多行合并为一行 以便一行中的某些列替换要合并的另一行中相同列中的空值 这是我所拥有的和我想要实现的目标的一个例子 查询是 SELECT Drug Name DefaultVendor Name Drug Strength Catalo
  • AndroidrelativeLayoutalignTop不起作用

    我正在尝试在RelativeLayout 中使用alignTop 属性 以便将文本设置在个人资料图片的右侧 与图片的顶部对齐 这是我的布局
  • 将文本添加到 DataGridView 行标题

    C 是否允许将字符串添加到 DataGridView 中的 RowHeader 如果是的话 是如何实现的呢 我正在编写一个 Windows 窗体来显示今年迄今为止的客户付款数据 ColumnHeaders 显示一月 二月 三月等 而不是有一
  • 如何避免 JavaScript 中的短路求值?

    我需要执行两边 声明 但如果第一部分返回 则不会发生这种情况false 例子 function doSomething x console log x function checkSomething x var not1 x 1 if no
  • 如何保护客户端/服务器套接字通信的安全

    假设客户端和服务器应用程序在不同的计算机上运行 Today Server will receive the request and cast it as needed ProxyResponse message ProxyResponse
  • docker buildx“执行用户进程导致:执行格式错误”

    我正在尝试交叉编译一个 Rust 应用程序以在我的树莓派集群上运行 我看到 docker 的 buildx 应该能够使这成为可能 我现在有一个最小的 dockerfile 如下所示 FROM rust RUN apt get update
  • 在本地工作的 R 脚本不适用于shinyapp.io

    我正在尝试组装一个 R Shiny 应用程序 至少在最初 它可以绘制日期数据的直方图 我让它在 RStudio 的本地系统上工作得很好 但在闪亮的应用程序 io 中它不起作用 目前 该应用程序非常简单 用户界面实际上没有做任何事情 数据只是
  • Jupyter 上 Sparkcollect() 的 IllegalArgumentException

    我设置了 Jupyter 4 3 0 Python 3 6 3 Anaconda 和 PySpark 2 2 1 以下示例在通过 Jupyter 运行时将失败 sc SparkContext getOrCreate rdd sc paral
  • 如何获取两个列表之间的所有唯一分配

    我有两个列表 每个列表都可以包含重复的值 但任何值只能出现在这两个列表之一 或没有 中 A 0 1 B 2 3 我想获得这两个列表之间的所有唯一映射 assignment A B 0 2 1 3 0 3 1 2 我知道这可以例如使用 ite
  • 如何解决 MSCV 中 Boost 文件系统库的 LNK1104 错误?

    我无法将我的项目链接到 Microsoft Visual C 2008 Express Edition 中的 Boost 版本 1 37 0 文件系统 lib 文件 文件系统库是not仅标头库 我一直在关注Windows 入门 http w
  • 如何处理pygame中不同组件的时间

    我正在制作一个 pygame 游戏 人们可以从商店购买炸弹 玩家还可以投下购买的炸弹数量 我需要一种方法让每个炸弹在投下 3 秒后消失 在下面的代码中 我只能投下炸弹 但是我尝试了各种方法但失败了 import pygame import
  • 使用 .NET Core 的 Linux/Unix 上的文件权限

    我正在尝试学习如何使用 NET Core 在 Linux Unix 上设置文件权限 我已经在这里发现了一个问题 它指出了 System IO FileSystem 的方向 但我似乎找不到任何有关如何使用它的文档 简而言之 我想从仅在 Lin