C# 将代码转换为读取字节并存储数据

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; }

我正在对某人的代码进行增强。 基本上,这家伙编写它是为了直接从单独控制台项目上的文件夹路径读取csv文件,代码如下:

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))