使用 .net 核心控制台应用程序创建具有 777 权限的文件

Posted

技术标签:

【中文标题】使用 .net 核心控制台应用程序创建具有 777 权限的文件【英文标题】:Create file with 777 permission with .net core console application 【发布时间】:2021-12-18 14:16:09 【问题描述】:

我正在尝试在 .net 核心中做一个控制台应用程序,它将在 centOS 上运行。

这个应用程序将创建一个 PDF 文件并在上面写一些东西。

应用程序能够在正确的文件中创建文件,但不能写入文件,因为我猜是因为我有 UnauthorizedAccessException 的权限。

如何创建具有 777 权限的 PDF 文件?

这就是我创建和写入文件的方式:

private static void DoProcessing(GenerationFile generationFile, IMyProgress progress)

    IConfiguration config = ConfJson.GetConfig();

    string tmpDirectoryPath = Path.Combine(AppDomain.CurrentDomain.BaseDirectory, "Fichiers");
    string fileName = string.Empty;
    Guid guid = Guid.NewGuid();
    List<string> lstOfNameFile = new List<string>();
    ConsoleSpinner spinner = new ConsoleSpinner();

    Console.WriteLine("Fichiers en cours de création (Peut être long en fonction de la taille des fichiers)");

    //Option pour le parallel For
    var optionsParallel = new ParallelOptions
    
        MaxDegreeOfParallelism = Environment.ProcessorCount
    ;

    //Creation de la liste des noms des fichiers
    for (int i = 0; i < generationFile.ArchiveESC; i++)
    
        fileName = $"tmpDirectoryPath/i + 1_guid.pdf";
        lstOfNameFile.Add(fileName);
    

    //Gestion du spinner dans la console
    ConsoleSpinner consoleSpinner = new ConsoleSpinner();
    object objectLock = new object();

    Console.Write($"\rCréation en cours : 0%    ");

    Parallel.ForEach(lstOfNameFile, item =>
    
        using (Stream outStream = new FileStream(item, FileMode.Create, FileAccess.ReadWrite))
        using (Document outDoc = Document.Create(outStream, Conformance.PdfA2B, null))
        
            //Taille de la page
            Size size = new Size
            
                Height = 480,
                Width = 480
            ;
            try
            
                //Police de la page   
                Font font = Font.CreateFromSystem(outDoc, "Arial", "Bold", true);

                //Ajout des pages
                for (int j = 0; j < generationFile.SizeMaxFile; j++)
                
                    Page page = Page.Create(outDoc, size);
                    AddText(outDoc, page, font, 14, fileName, j, generationFile.SizeMaxFile);
                    for (int k = 0; k < 292; k++)
                    
                        AddImage(outDoc, page, 30, 30);
                    
                    outDoc.Pages.Add(page);
                    lock (objectLock)  spinner.Turn(); 
                
             catch(Exception ex)
            
                throw new AggregateException("Impossible de modifier le pdf pour atteindre la taille requise");
            
            //Gestion progression pourcentage
            progress.Increment(1);
        
    );

    Console.ForegroundColor = ConsoleColor.White;
    Console.WriteLine("\rCréation des fichiers : 100%    ");

    Console.ForegroundColor = ConsoleColor.White;
    Console.WriteLine($"Les fichiers ont été créé dans le dossier : tmpDirectoryPath", Console.ForegroundColor);

【问题讨论】:

【参考方案1】:

对于偶然发现此问题的任何人,请使用 Mono.Posix nugget 包。它有你需要的一切。

【讨论】:

您的答案可以通过额外的支持信息得到改进。请edit 添加更多详细信息,例如引用或文档,以便其他人可以确认您的答案是正确的。你可以找到更多关于如何写好答案的信息in the help center。

以上是关于使用 .net 核心控制台应用程序创建具有 777 权限的文件的主要内容,如果未能解决你的问题,请参考以下文章

。Net核心-具有不同响应回调的多个服务请求

带有.net核心的控制台应用程序使用soap Web服务的问题

使所有新目录具有777权限

如何在 Windows 上创建针对 WPF 的 .NET 核心库?

在 .net 核心控制台应用程序中创建一个 websocket 服务器

使用asp.net核心的控制器和路由问题