使用 .net 核心控制台应用程序创建具有 777 权限的文件
Create file with 777 permission with .net core console application
我正在尝试在 .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);
}
对于偶然发现此问题的任何人,请使用 Mono.Posix nugget 包。它有你需要的一切。
我正在尝试在 .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);
}
对于偶然发现此问题的任何人,请使用 Mono.Posix nugget 包。它有你需要的一切。