C# 将代码转换为读取字节并存储数据
我正在对某人的代码进行增强。 基本上,这家伙编写它是为了直接从单独控制台项目上的文件夹路径读取csv文件,代码如下:C# 将代码转换为读取字节并存储数据,c#,csv,filereader,C#,Csv,Filereader,我正在对某人的代码进行增强。 基本上,这家伙编写它是为了直接从单独控制台项目上的文件夹路径读取csv文件,代码如下: static void Main(string[] args) { if (args.Length < 1) { Console.WriteLine("Usage: ImportUser.exe <input.csv>"); return; }
static void Main(string[] args)
{
if (args.Length < 1)
{
Console.WriteLine("Usage: ImportUser.exe <input.csv>");
return;
}
string inputFileDirectory = args[0];
string outputFileDirectory = Path.Combine(Environment.CurrentDirectory, "error.csv");
var i = 1;
var j = 0;
using (var reader = new StreamReader(inputFileDirectory))
{
using (var writer = new StreamWriter(outputFileDirectory, false))
{
var csv = new CsvReader(reader);
csv.Configuration.RegisterClassMap<RecordMapper>();
csv.Configuration.HeaderValidated = null;
var outCsv = new CsvWriter(writer);
var records = csv.GetRecords<Record>();
List<Record> BadRecords = new List<Record>();
foreach (var record in records)
{
Console.WriteLine("Processing record " + i);
record.Index = i++;
try
{
using (var db = new dcIngressDataContext())
{
ProcessRecord(db, record);
}
}
catch (Exception ex)
{
j++;
{
record.Error = ex.ToString();
Console.WriteLine(ex.ToString());
Console.WriteLine(record);
outCsv.WriteRecord<Record>(record);
outCsv.NextRecord();
}
}
}
}
}
Console.WriteLine(i - 1 + " records processed.");
if (j > 0)
{
Console.WriteLine(j + " records not added. See error.csv for details.");
}
Console.WriteLine("Press Any Key To Continue...");
Console.ReadLine();
}
蜂房
public WebApiResponse<ImportUsers> importUsers(ImportUsers file)
{
var response = Client.PostAsJsonAsync("api/attachments/importusers", file).Result;
if (response.IsSuccessStatusCode)
{
var apiResponse = response.Content.ReadAsAsync<WebApiResponse<ImportUsers>>().Result;
if (apiResponse.Status == ReturnStatus.SessionInvalid)
{
throw new InvalidSessionException();
}
if (apiResponse.Status == ReturnStatus.NoAccess)
{
throw new NoAccessException();
}
return apiResponse;
}
else
{
return new WebApiResponse<ImportUsers>()
{
Status = ReturnStatus.Failed,
Error = "Error connecting to server. " + response.ReasonPhrase,
Result = null
};
}
}
publicWebAPIResponse导入器(导入器文件)
{
var response=Client.PostAsJsonAsync(“api/attachments/importusers”,file).Result;
if(响应。IsSuccessStatusCode)
{
var apiResponse=response.Content.ReadAsAsync().Result;
if(apiResponse.Status==ReturnStatus.SessionInvalid)
{
抛出新的InvalidSessionException();
}
if(apiResponse.Status==ReturnStatus.NoAccess)
{
抛出新的NoAccessException();
}
返回响应;
}
其他的
{
返回新的WebApiResponse()
{
状态=返回状态。失败,
Error=“连接到服务器时出错。”+response.ReasonPhrase,
结果=空
};
}
}
从这里我将把字节传递给webApi。我创建了一个方法并在中复制了代码,但它无法工作
[HttpPost]
[Route("api/attachments/importusers")]
public WebApiResponse ImportUser([FromBody]ImportUserDTO value)
{
var response = new WebApiResponse();
var i = 1;
var j = 0;
using (var reader = new StreamReader(inputFileDirectory))
{
using (var writer = new StreamWriter(outputFileDirectory, false))
{
var csv = new CsvReader(reader);
csv.Configuration.RegisterClassMap<RecordMapper>();
csv.Configuration.HeaderValidated = null;
var outCsv = new CsvWriter(writer);
var records = csv.GetRecords<Record>();
List<Record> BadRecords = new List<Record>();
foreach (var record in records)
{
Console.WriteLine("Processing record " + i);
record.Index = i++;
try
{
using (var db = new ApplicationDbContext())
{
ProcessRecord(db, record);
}
}
catch (Exception ex)
{
j++;
{
record.Error = ex.ToString();
Console.WriteLine(ex.ToString());
Console.WriteLine(record);
outCsv.WriteRecord<Record>(record);
outCsv.NextRecord();
}
}
}
}
}
Console.WriteLine(i - 1 + " records processed.");
if (j > 0)
{
Console.WriteLine(j + " records not added. See error.csv for details.");
}
Console.WriteLine("Press Any Key To Continue...");
Console.ReadLine();
return response;
}
[HttpPost]
[路线(“api/附件/进口商”)]
公共WebApiResponse导入器([FromBody]ImportUserTo值)
{
var response=新的webapirponse();
var i=1;
var j=0;
使用(var reader=newstreamreader(inputFileDirectory))
{
使用(var writer=newstreamwriter(outputFileDirectory,false))
{
var csv=新的CsvReader(读卡器);
csv.Configuration.RegisterClassMap();
csv.Configuration.HeaderValidated=null;
var outCsv=新的CsvWriter(writer);
var records=csv.GetRecords();
List BadRecords=新列表();
foreach(记录中的var记录)
{
控制台写入线(“处理记录”+i);
record.Index=i++;
尝试
{
使用(var db=new ApplicationDbContext())
{
ProcessRecord(数据库,记录);
}
}
捕获(例外情况除外)
{
j++;
{
record.Error=ex.ToString();
Console.WriteLine(例如ToString());
控制台写入线(记录);
outCsv.WriterRecord(记录);
outCsv.NextRecord();
}
}
}
}
}
控制台.WriteLine(i-1+“已处理记录”);
如果(j>0)
{
Console.WriteLine(j+“未添加记录。有关详细信息,请参阅error.csv”);
}
Console.WriteLine(“按任意键继续…”);
Console.ReadLine();
返回响应;
}
我通过简单地使用MemoryStream找到了解决方案
Stream stream = new MemoryStream(value.Content);
替换
using (var reader = new StreamReader(inputFileDirectory))
与
到目前为止你试过什么?什么不起作用?您需要描述输入文件的格式。如果您有byte[],那么文件是二进制的,二进制结构将决定解析方法。上周我在这篇帖子上做了一个二进制解析器:@jdweng我把我创建的方法放进去了,请帮我看看。我知道我需要更改streamreader路径,以便它可以将字节[]读取/转换为进程,但我不知道如何操作。您需要使用BinaryReader,它需要一个流而不是streamreader:Stream Stream=File.OpenRead(inputFileDirectory);BinaryReader=新的BinaryReader(流)@jdweng正在导入importUserTo中的3个数据类型'public byte[]Content{get;set;}public int CompanyId{get;set;}public string FileName{get;set;}',我想不出一种方法来实现它
using (var reader = new StreamReader(inputFileDirectory))
using (var reader = new StreamReader(stream))