Как читать файлы из MockRepository.cs - appEnvironment не существует - PullRequest
0 голосов
/ 07 июня 2018

У меня Visual Studio 2017. Я пытаюсь прочитать свой CSV-файл в моей базе данных, чтобы инициализировать его.Я слежу за тренировкой в ​​ pluralsight aspdotnet-core-2-0-mvc-application-visual-studio-2017 пересматриваю Bethany's Pie Shop для моего Node Repo, и я на полпути к созданию страницы спискаДемо Создание домена на тренинге.В ходе обучения они инициализируют свою БД статической информацией о Списке, и я хочу использовать мой CSV-файл.Но у меня проблемы с чтением файла.Я посмотрел на mapPath не существует в текущем контексте , но это не помогло мне.Поэтому я пытаюсь предложить на rootFolderPath , а затем добавит путь к моему CSV-файлу.Я очень плохо знаком с веб-страницами MVC и т. Д., Поэтому у меня возникают проблемы с пониманием того, как применить этот последний пример к моему коду.

Я немного запутался, как appEnvironment предоставит мне rootPath для использования с моим файлом, который я собираюсь использовать с StreamReader.

Прямо сейчас я вижу

appEnvironment не существует в текущем контексте, где я пытаюсь вернуть его в моем Get ().

Я знаю, что должен вернуть туда IEnumerable, но как мне получить rootPath?Пример, который использовал appenvironment, возвращал это:

FolderScanner scanner = new FolderScanner(_hostEnvironment.WebRootPath);
return scanner.scan();

У меня нет FolderScanner.Может быть, это вещь Microsoft?Я больше программист на C ++ / php, поэтому не всегда уверен.Терпите меня, я пытаюсь изучить этот новый (для меня) мир технологий Microsoft.Это то, что у меня есть, и я прошу прощения за то, что включил много информации в мой MockNodeRepository.cs:

using System;
using System.Collections.Generic;
using System.Linq;
using System.Threading.Tasks;
using System.Data;
using System.IO;
using System.Web;
using Microsoft.AspNetCore.Hosting;
using Microsoft.Extensions.Hosting;
//using Microsoft.AspNetCore.Hosting.Internal.HostingEnvironment;
using Microsoft.AspNetCore.Http;

namespace CATV_Dashboard_Node_Viewer.Models
{
    public class MockNodeRepository : INodeRepository
    {
        private List<Node> _nodes;
        private string csvFile;
        //private string csvFile = HttpContext.Current.Server.MapPath("~/App_Data/Data.csv");//System.IO.File.ReadAllText(HttpContext.Current.Server.MapPath("~htm/external/Data.csv")); //need to check path here

        private string rootPath;
        public string CsvFile { get => csvFile; set => csvFile = rootPath + "/App_Data/Data.csv"; }

        public IEnumerable<string> Get()
        {
            return appEnvironment.ApplicationName; //appEnvironment doesn't exist in current contest
        }

        private readonly IHostingEnvironment _appEnvironment;

        public MockNodeRepository(IHostingEnvironment appEnvironment)
        {
            _appEnvironment = appEnvironment;
        }
        public MockNodeRepository()
        {
            if(_nodes == null)
            {
                InitializeNodes();
            }
        }
        private void InitializeNodes()
        {
            _nodes = ConvertCSVtoList(CsvFile);
        }

        private  List<Node> ConvertCSVtoList(string strFilePath)
        {
            List<Node> nodes = new List<Node>();
            StreamReader sr = new StreamReader(strFilePath);
            string[] headers = sr.ReadLine().Split(','); //remove header from Stream
            //get each row of csv and convert to node add to List
            while(!sr.EndOfStream)
            {
                string[] rows = sr.ReadLine().Split(',');
                nodes.Add( new Node { NodeID = rows[0], Color = rows[1], CMTSName = rows[3], PercentDown = Convert.ToInt32(rows[4]), Count = Convert.ToInt32(rows[5]) });
            }
            return nodes;
        }

        public IEnumerable<Node> GetAllNodes()
        {
            throw new NotImplementedException();
        }

        public Node GetNodeByID(string nodeId)
        {
            throw new NotImplementedException();
        }
    }
}

1 Ответ

0 голосов
/ 07 ноября 2018

Я храню небольшой файл statehelper.cs для хранения своей среды.Я ловлю и храню окружающую среду в startup.cs.Затем я использую Streamreader, как показано ниже, для записи файлов.Должно работать одинаково.

startup.cs - хранилище ihostingenvironment

public void Configure(IApplicationBuilder app, IHostingEnvironment env)
{
    Utilities.StateHelper.HostingEnvironment = env;
    app.UseHttpsRedirection();
    app.UseStaticFiles();
    app.UseCookiePolicy();
    app.UseMvcWithDefaultRoute();
}

StateHelper.cs

public static class StateHelper
{
    public static IHostingEnvironment HostingEnvironment { get; set; } = null;
}

Использование потокового ридера для записи файла - в контроллере в обработчике действий Post

string fileName = Path.GetFileName(formFile.FileName);
filePath = Path.Combine(Utilities.StateHelper.HostingEnvironment.WebRootPath, "content", fileName );

using (var stream = new FileStream(filePath, FileMode.Create))
{
await formFile.CopyToAsync(stream);
}

Счастливое кодирование ...

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...