如何在ASP.net/blazor上读取文本文件作为字符串?



所以,我有一个文本文件,我需要阅读。然而,无论我如何尝试描述它的路径,我似乎都无法使用System.IO.File.ReadAllText();我似乎无法找出当前目录,无论System.IO.Directory.GetCurrentDirectory()吐出什么都没有任何文件;无论我尝试将什么作为路径,都不可避免地返回一个异常,其中包含消息"无法找到文件";移动文件似乎没有帮助。

microsoft文档建议使用一个文档记录较差的Server对象,但是那个只会引发一个错误,因为他们并没有真正解释应该做什么我真的不确定应该做什么;更奇怪的是,样式表引用和所有的工作都很好- c#不喜欢我写路径的方式。

可能有一个相当简单的修复方法。有人建议我在csproj文件中使用<ItemGroup> s,但这似乎没有导致任何切实的结果。

我第一次尝试的例子之一,直接在Client文件夹中添加state.txt:

@page "/"
<div class=galaxy>
@System.IO.Path.GetFullPath(@"~" + System.IO.Directory.GetCurrentDirectory())
@Main()
</div>
@code {
    SaveNode state;
    string Main()
    {
        try
        {
            System.IO.File.ReadAllText(@"~state.txt");
        }
        catch (Exception e)
        {
            return e.Message;
        }
    }
}

您可以像这样访问wwwroot文件夹中的文件

@inject IWebHostEnvironment webHostEnvironment;
<div class=galaxy>
    @System.IO.File.ReadAllText(System.IO.Path.Combine(webHostEnvironment.WebRootPath, "state.txt"))
</div>

如果你在wwwroot中有某个文件夹,那么像这样

@inject IWebHostEnvironment webHostEnvironment;
<div class=galaxy>
    @System.IO.File.ReadAllText(System.IO.Path.Combine(webHostEnvironment.WebRootPath, "yourfolder/state.txt"))
</div>

如果你的项目是WASM,那么

@inject HttpClient httpClient;
<div class=galaxy>
    @fileText
</div>

string fileText;
protected override async Task OnInitializedAsync()
{
    fileText = await ReadFile(); 
}
private async Task<string> ReadFile()
{
    HttpResponseMessage response = await httpClient.GetAsync("state.txt");
    HttpContent content = response.Content;
    return await content.ReadAsStringAsync();
}

无论System.IO.Directory.GetCurrentDirectory()输出什么都没有任何文件;

这意味着你是在Blazor WebAssembly上。你不能"读"那里的文件,你需要下载。把文件放在wwwroot目录下,不要使用~

  //System.IO.File.ReadAllText(@"~state.txt");
  using var stream = await httpClient.GetStreamAsync("state.txt");
  // use async I/O on the stream

相关内容

  • 没有找到相关文章

最新更新