C# 读取文本文件而不复制到硬盘
我使用的是Asp.Net Core 3.0,我发现客户端将文本文件传递给我的API,然后API将使用我创建的名为ParseDataToModel()的函数将文本文件解析为数据模型,然后使用Entity Framework将该数据模型存储到数据库中。由于我的代码将文件解析为数据模型,因此如果没有必要,我真的不需要将其复制到硬盘上。关于流,我没有太多的知识,我也在谷歌上搜索了不少,但我想知道是否有一种方法可以检索上传文件的字符串数据,而不必将它们复制到硬盘上?这似乎是不必要的额外步骤。。。。下面是我上传文件并插入数据库的代码:C# 读取文本文件而不复制到硬盘,c#,asp.net-core,io,C#,Asp.net Core,Io,我使用的是Asp.Net Core 3.0,我发现客户端将文本文件传递给我的API,然后API将使用我创建的名为ParseDataToModel()的函数将文本文件解析为数据模型,然后使用Entity Framework将该数据模型存储到数据库中。由于我的代码将文件解析为数据模型,因此如果没有必要,我真的不需要将其复制到硬盘上。关于流,我没有太多的知识,我也在谷歌上搜索了不少,但我想知道是否有一种方法可以检索上传文件的字符串数据,而不必将它们复制到硬盘上?这似乎是不必要的额外步骤。。。。下面是我
[HttpPost("upload"), DisableRequestSizeLimit]
public IActionResult Upload()
{
var filePaths = new List<string>();
foreach(var formFile in Request.Form.Files)
{
if(formFile.Length > 0)
{
var filePath = Path.GetTempFileName();
filePaths.Add(filePath);
using(var stream = new FileStream(filePath, FileMode.Create))
{
formFile.CopyTo(stream);
}
}
}
BaiFiles lastFile = null;
foreach(string s in filePaths)
{
string contents = System.IO.File.ReadAllText(s);
BaiFiles fileToCreate = ParseFileToModel(contents);
if (fileToCreate == null)
return BadRequest(ModelState);
var file = _fileRepository.GetFiles().Where(t => t.FileId == fileToCreate.FileId).FirstOrDefault();
if (file != null)
{
ModelState.AddModelError("", $"File with id {fileToCreate.FileId} already exists");
return StatusCode(422, ModelState);
}
if (!ModelState.IsValid)
return BadRequest();
if (!_fileRepository.CreateFile(fileToCreate))
{
ModelState.AddModelError("", $"Something went wrong saving file with id {fileToCreate.FileId}");
return StatusCode(500, ModelState);
}
lastFile = fileToCreate;
}
return CreatedAtRoute("GetFile", new { fileId = lastFile.FileId }, lastFile);
}
System.IO.File.ReadAllText(文件路径)
是一种方便的方法。它基本上是这样做的:
string text = null;
using (var stream = FileStream.OpenRead(filePath))
using (var reader = new StreamReader(stream))
{
text = reader.ReadToEnd();
}
FormFile实现了一个方法,因此您可以简单地使用它来代替上面的stream
:
string text = null;
using (var stream = formFile.OpenReadStream())
using (var reader = new StreamReader(stream))
{
text = reader.ReadToEnd();
}
@约翰·莫妮卡:哇。我以前试过,但当时正试图将我的表单文件直接传递给StreamReader(NOOB)。我没有想到首先使用OpenReadStream,然后将流传递给StreamReader。。。非常感谢你!!我将很快补充一个答案:)非常感谢!对不起,我没有生气,哈哈,这是漫长的一天!
string text = null;
using (var stream = formFile.OpenReadStream())
using (var reader = new StreamReader(stream))
{
text = reader.ReadToEnd();
}