2016-03-07 7 views
13

मेरे पास एक एएसपी.नेट कोर (1.0-आरसी 1-फाइनल) एमवीसी समाधान है और मैं प्रोजेक्ट के भीतर एक साधारण टेक्स्ट फ़ाइल स्टोर करना चाहता हूं जिसमें स्ट्रिंग्स की एक सूची है जिसे मैंने पढ़ा मेरे नियंत्रक में स्ट्रिंग सरणी।समाधान डेटा फ़ाइलों को पढ़ें ASP.Net Core

मुझे अपनी परियोजना में इस फ़ाइल को कहां स्टोर करना चाहिए और मैं अपने नियंत्रकों में उन फ़ाइलों को कैसे पढ़ूं?

ASP.net 4.x में मैं app_data फ़ोल्डर और इस

string path = Server.MapPath("~/App_Data/File.txt"); 
string[] lines = System.IO.File.ReadAllLines(path); 

लेकिन Server.MapPath की तरह कुछ किया इस्तेमाल किया है चाहता हूँ ASP.Net में मान्य होने के लिए कोर 1 प्रतीत नहीं होता है और मैं नहीं कर रहा हूँ सुनिश्चित करें कि app_data फ़ोल्डर या तो है।

उत्तर

13

मुझे इसका एक आसान समाधान मिला।

सबसे पहले, आप अपने समाधान में कहीं भी एक फ़ोल्डर बना सकते हैं, आपको .NET 4.x से 'app_data' जैसे सम्मेलनों से चिपकने की आवश्यकता नहीं है।

मेरी परिदृश्य में, मैं अपने प्रोजेक्ट की जड़ में एक फ़ोल्डर 'डेटा' कहा जाता है बनाया है, मैं वहाँ में मेरी txt फ़ाइल डाल दिया और एक स्ट्रिंग सरणी

var owners = System.IO.File.ReadAllLines(@"..\data\Owners.txt");

+0

यह काम नहीं कर रहा है मुझे मेरी मशीन में, क्योंकि यह प्रोजेक्ट फ़ोल्डर छोड़ देता है। I. ई .: इसे "डी: \ SOLUTION_FOLDER \ PROJECT_FOLDER \ data \ Owners.txt" होना चाहिए और यह "D: \ SOLUTION_FOLDER \ data \ Owners.txt" से पढ़ने का प्रयास करता है – Porkopek

10

आपके नियंत्रक में आप IAplicationEnvironment पर निर्भरता ले सकते हैं और इसे कन्स्ट्रक्टर में इंजेक्शन दिया है, तो आप इसे अपनी फ़ाइल के पथ को स्थापित करने के लिए उपयोग कर सकते हैं ताकि आपकी फ़ाइल प्रोजेक्ट के भीतर किसी फ़ोल्डर में रह सके। "Env" नीचे दिए गए उदाहरण में IApplicationEnvironment के कहने

using Microsoft.Extensions.PlatformAbstractions; 

var pathToFile = env.ApplicationBasePath 
    + Path.DirectorySeparatorChar.ToString() 
    + "yourfolder" 
    + Path.DirectorySeparatorChar.ToString() 
    + "yourfilename.txt"; 

string fileContent; 

using (StreamReader reader = File.OpenText(pathToFile)) 
{ 
    fileContent = reader.ReadToEnd(); 
} 

ApplicationBasePath applicationRootFolder

टिप्पणी वहाँ भी IHostingEnvironment जो परिचित .MapPath विधि है मौजूद है का प्रतिनिधित्व करता है, लेकिन यह wwwroot नीचे संग्रहीत बातों के लिए है फ़ोल्डर। आपको केवल wwwroot फ़ोल्डर के नीचे की चीज़ों को स्टोर करना चाहिए जिन्हें आप http अनुरोधों के साथ सेवा करना चाहते हैं, इसलिए स्ट्रिंग्स की अपनी सूची को एक अलग फ़ोल्डर में रखना बेहतर है।

+0

आपकी प्रतिक्रिया के लिए धन्यवाद, लेकिन मुझे एक सरल विधि मिली जो मैंने पोस्ट की है और उत्तर के रूप में चिह्नित होगी। धन्यवाद हालांकि –

+0

मैंने एक सही उत्तर दिया, सिर्फ इसलिए कि यह अंत में आपके द्वारा चुने गए सटीक वाक्यविन्यास नहीं है, मेरे उत्तर को स्वीकार करने का एक बड़ा कारण नहीं है Iho। अगर आपका जवाब गलत नहीं है तो भी आपका जवाब विंडोज फाइल सिस्टम पर ही सही होगा। –

+0

ठीक है, मैं आपका मुद्दा देखता हूं कि आपका समाधान क्रॉस प्लेटफार्म होगा और इसलिए बेहतर होगा - आपको जवाब दिया है, धन्यवाद –

3
लिए सामग्री पढ़ने के लिए इस कोड का इस्तेमाल किया

IApplicationEnvironment और IRuntimeEnvironment को 2016/04/26 को announcement on github के रूप में हटा दिया गया है।

मैं इस

private readonly string pathToFile; 

public UsersController(IHostingEnvironment env) 
{ 
    pathToFile = env.ContentRootPath 
     + Path.DirectorySeparatorChar.ToString() 
     + "Data" 
     + Path.DirectorySeparatorChar.ToString() 
     + "users.json"; 
} 

मेरे .json फ़ाइल src/WebApplication/Data/users.json

पर स्थित है के साथ @ JoeAudette के कोड की जगह मैं तो पढ़ने/की तरह तो

private async Task<IEnumerable<User>> GetDataSet() 
{ 
    string source = ""; 

    using (StreamReader SourceReader = OpenText(pathToFile)) 
    { 
     source = await SourceReader.ReadToEndAsync(); 
    } 

    return await Task.Factory.StartNew(() => JsonConvert.DeserializeObject<IEnumerable<User>>(source)); 
} 
2

इस विधि के लिए काम किया इस डेटा पार्स मुझे स्थानीय रूप से और Azure पर्यावरण पर।यह ऊपर

public static string ReadFile(string FileName) 
    { 
     try 
     { 
      using (StreamReader reader = File.OpenText(FileName)) 
      { 
       string fileContent = reader.ReadToEnd(); 
       if (fileContent != null && fileContent != "") 
       { 
        return fileContent; 
       } 
      } 
     } 
     catch (Exception ex) 
     { 
      //Log 
      throw ex; 
     } 
     return null; 
    } 

जो जवाब से लिया जाता है और यह कैसे लागू किया है कि विधि

string emailContent = ReadFile("./wwwroot/EmailTemplates/UpdateDetails.html"); 
5

आप अपने नियंत्रक में निर्भरता इंजेक्शन के साथ वातावरण प्राप्त कर सकते है:

using Microsoft.AspNetCore.Hosting; 
.... 

public class HomeController: Controller 
{ 
    private IHostingEnvironment _env; 

    public HomeController(IHostingEnvironment env) 
    { 
    _env = env; 
    } 
... 

तो फिर तुम कर सकते हैं अपने कार्यों में wwwroot स्थान प्राप्त करें: _env.WebRootPath

var owners = System.IO.File.ReadAllLines(System.IO.Path.Combine(_env.WebRootPath,"File.txt")); 
0

यह हमेशा स्थानीय रूप से और आईआईएस पर मेरे लिए काम करता है।

AppDomain.CurrentDomain.BaseDirectory 
संबंधित मुद्दे