我有一个简单的问题,但这使我发疯。
我有一个包含很多JSON
文件的文件夹,我只需要一个个打开这些文件并执行操作。
因此,我需要打开第一个,阅读并做点什么,然后转到第二个,以此类推,直到最后一个。
这是我在网上搜索时尝试的代码:
string folderpath = @"C:\Users\rfo\Desktop\MM\VM DB\nv - master\nvd";
var fixedfolderpath = Environment.ExpandEnvironmentVariables(folderpath);
string [] filesnumber = Directory.GetFiles(fixedfolderpath, "*.json");
foreach (string filename in filesnumber)
{
var jsonFull = System.IO.File.ReadAllText(filename);
但是我一直遇到错误DirectoryNotFoundException: Could not find a part of the path on the browser
。
我正在使用asp.net CORE 3
和Visual Studio 2019。
答案 0 :(得分:0)
如果要从桌面获取文件,则可以使用以下方法:
string path = Path.Combine(
Environment.GetFolderPath(Environment.SpecialFolder.Desktop),
@"MM\VM DB\nv - master\nvd");
但是您可能会遇到访问权限问题
答案 1 :(得分:0)
正如其他人建议的那样,最好将文件移动到解决方案中。例如,您可以将这些文件复制到项目文件夹中:
├───YourApp.csproj # your `*.csproj`
├───Controllers/
├───Models/
├───Views/
├───wwwroot/
├───MM/ # your target folder
│ └───VM/
│ └───VM DB/
│ └───nv - master/
│ └───nvd/
| └─── *.json
除此之外,别忘了在 *.csproj
文件中添加配置,这样您的json文件将在您构建/发布该应用程序:
<ItemGroup>
<None Update="MM\**\*.*">
<CopyToOutputDirectory>PreserveNewest</CopyToOutputDirectory>
</None>
</ItemGroup>
此外,您似乎正在使用ASP.NET Core而不是ASP.NET。如果是这样,您可以通过注入IWebHostEnvironment
来引用此文件夹,以便调用webHostEnv.ContentRootPath
来获取根目录(即,源代码中的项目文件方向,以及在出现以下情况时的YourAssembly.dll目录)已发布)。
例如,您可以在控制器中注入IWebHostEnviroment
实例:
public class HomeController : Controller { private readonly IWebHostEnvironment _env; public HomeController(IWebHostEnvironment env) { this._env = env; } public IActionResult Privacy() { var dir = Path.Combine( this._env.ContentRootPath, @"MM\VM\VM DB\nv - master\nvd"); string[] filesnumber = Directory.GetFiles(dir, "*.json"); foreach (string filename in filesnumber) { var jsonFull = System.IO.File.ReadAllText(filename); ... } return Ok("hello,world"); } }
var assemDir = Path.GetDirectoryName(Assembly.GetExecutingAssembly().Location);
var dir = Path.Combine(assemDir, @"MM\VM\VM DB\nv - master\nvd");
string[] filesnumber = Directory.GetFiles(dir, "*.json");
请注意,这不是最安全的方法。建议尽可能使用DI方法(IWebHostEnviroment
)。