C# .Net核心应用程序可以';t将文件写入OSX的任何文件夹

C# .Net核心应用程序可以';t将文件写入OSX的任何文件夹,c#,.net,macos,asp.net-core,C#,.net,Macos,Asp.net Core,我正在OSX中构建一个.NETCore2.0应用程序,它是一个WebAPI应用程序,当API端点被命中时,它会创建一个带有虚拟数据的.xlsx。当我尝试运行它(dotnet运行)时,我得到 我试着以sudo的身份运行它,并更改它正在写入的文件夹,但都没有用 // GET api/values/5 [HttpGet("{id}")] public string Get(int id) { CreatePackage("./"); return

我正在OSX中构建一个.NETCore2.0应用程序,它是一个WebAPI应用程序,当API端点被命中时,它会创建一个带有虚拟数据的.xlsx。当我尝试运行它(dotnet运行)时,我得到

我试着以sudo的身份运行它,并更改它正在写入的文件夹,但都没有用

// GET api/values/5
    [HttpGet("{id}")]
    public string Get(int id)
    {
        CreatePackage("./");
        return "value";
    }

    public void CreatePackage(string filePath)
    {
        using (SpreadsheetDocument package = SpreadsheetDocument.Create(filePath, SpreadsheetDocumentType.Workbook))
        {
            CreateParts(package);
        }
    }

    private void CreateParts(SpreadsheetDocument document)
    {
        WorkbookPart workbookPart = document.AddWorkbookPart();
        GenerateWorkbookPartContent(workbookPart);

        WorksheetPart worksheetPart = workbookPart.AddNewPart<WorksheetPart>("rId1");
        GenerateWorksheetPartContent(worksheetPart);
    }

    private void GenerateWorkbookPartContent(WorkbookPart workbookPart)
    {
        Workbook workbook = new Workbook();
        workbook.AddNamespaceDeclaration("r", "http://schemas.openxmlformats.org/officeDocument/2006/relationships");

        Sheets sheets = new Sheets();
        Sheet sheet = new Sheet() { Name = "Sheet", SheetId = (UInt32Value)1U, Id = "rId1" };
        sheets.Append(sheet);

        workbook.Append(sheets);
        workbookPart.Workbook = workbook;
    }

    private void GenerateWorksheetPartContent(WorksheetPart worksheetPart)
    {
        Worksheet worksheet = new Worksheet();
        SheetData sheetData = new SheetData();

        Row row = new Row();
        Cell cell = new Cell() { CellReference = "A1", DataType = CellValues.InlineString };
        InlineString inlineString = new InlineString();
        Text text = new Text();
        text.Text = "hello";
        inlineString.Append(text);
        cell.Append(inlineString);
        row.Append(cell);

        sheetData.Append(row);
        worksheet.Append(sheetData);
        worksheetPart.Worksheet = worksheet;
    }
//获取api/values/5
[HttpGet(“{id}”)]
公共字符串Get(int-id)
{
CreatePackage(“./”);
返回“值”;
}
public void CreatePackage(字符串文件路径)
{
使用(SpreadsheetDocument包=SpreadsheetDocument.Create(文件路径,SpreadsheetDocumentType.工作簿))
{
零件(包装);
}
}
私有void CreateParts(电子表格文档)
{
WorkbookPart WorkbookPart=document.AddWorkbookPart();
GenerateWorkbookPartContent(workbookPart);
WorksheetPart WorksheetPart=workbookPart.AddNewPart(“rId1”);
GenerateWorksheetPartContent(工作表部分);
}
专用void GenerateWorkbookPartContent(WorkbookPart WorkbookPart)
{
工作簿=新工作簿();
工作簿.AddNamespaceDeclaration(“r”http://schemas.openxmlformats.org/officeDocument/2006/relationships");
板材=新板材();
Sheet Sheet=new Sheet(){Name=“Sheet”,SheetId=(uint32值)1U,Id=“rId1”};
附页(页);
工作簿。附加(页);
工作簿=工作簿;
}
专用void GenerateWorksheetPartContent(工作表部件工作表部件)
{
工作表=新工作表();
SheetData SheetData=新的SheetData();
行=新行();
Cell Cell=new Cell(){CellReference=“A1”,数据类型=CellValues.InlineString};
InlineString InlineString=新的InlineString();
Text Text=新文本();
text.text=“你好”;
inlineString.Append(文本);
cell.Append(inlineString);
行。追加(单元格);
sheetData.Append(行);
工作表。附加(表数据);
工作表部分工作表=工作表;
}
这是类的主要部分,我正在项目文件夹中创建文件(目前)。我看到过关于为CLI的所有文件授予读写权限的帖子,但这似乎并不理想。我还看到了关于设置文件属性的内容,但这是OpenXml电子表格创建方法,据我所知,它没有任何关于设置文件权限的内容(而且无论如何都需要在文件夹中)


任何帮助都将不胜感激

我想出来了,我发送的文件路径是folderpath而不是文件路径,问题解决了

[HttpGet("{id}")]
public string Get(int id)
{
    CreatePackage("./testfile.xlsx");
    return "value";
}

您是直接使用
dotnet run
,还是有一台web服务器是您的主机?@ChrisPratt我是在命令行中直接使用dotnet run
[HttpGet("{id}")]
public string Get(int id)
{
    CreatePackage("./testfile.xlsx");
    return "value";
}