วิธีที่ดีที่สุดในการอ่านไฟล์ข้อความจากเซิร์ฟเวอร์ใน asp.net-mvc คืออะไร

ในการดำเนินการกับคอนโทรลเลอร์อย่างหนึ่งของฉัน ฉันต้องอ่านในไฟล์ข้อความที่มีข้อมูลอ้างอิงมากมายอยู่ในนั้น ตอนนี้ฉันแค่ใส่มันไว้ในไดเร็กทอรี "/Content"

คำถามของฉันคือ:

  1. นี่เป็นตำแหน่งที่ "ถูกต้อง" ในการวางไฟล์นี้หรือฉันควรวางไว้ในไดเร็กทอรีอื่น
  2. วิธีที่ดีที่สุดในการอ่านไฟล์ข้อความใน asp.net-mvc ที่วางอยู่บนเซิร์ฟเวอร์คืออะไร

person leora    schedule 05.07.2011    source แหล่งที่มา
comment
ความถูกต้องขึ้นอยู่กับหลายสิ่งหลายอย่าง ขนาด ลักษณะ ความถี่ในการอัปเดต ฯลฯ   -  person Marc Gravell    schedule 05.07.2011
comment
ใช้ไลบรารีนี้ใช้งานง่ายใน asp.net filehelpers.com   -  person rahularyansharma    schedule 05.07.2011
comment
จริงหรือ. ใช้ไลบรารีเพื่ออ่านไฟล์ข้อความ?!   -  person    schedule 05.07.2011


คำตอบ (2)


หากไฟล์ไม่ควรเข้าถึงได้โดยตรงผ่าน URL คุณควรใส่ไฟล์ไว้ใน App_Data

หากต้องการอ่าน เพียงใช้:

var fileContents = System.IO.File.ReadAllText(Server.MapPath(@"~/App_Data/file.txt"));
person mathieu    schedule 05.07.2011
comment
หากไฟล์ควรจะเปิดเผยต่อสาธารณะ ให้วางไว้ในโฟลเดอร์เนื้อหาหรืออัปโหลด (หากอัปโหลด) - person mare; 05.07.2011
comment
ขอบคุณสำหรับคำแนะนำ HostingEnvironment.MapPath(@~/App_Data/file.txt) ก็ใช้ได้เช่นกันหากเซิร์ฟเวอร์ไม่สามารถเข้าถึงได้ง่าย - person Hong; 12.05.2014
comment
ใช้งานไม่ได้สำหรับฉันเพราะผลลัพธ์นี้รวมการกำหนดเส้นทางของ URL ด้วย - person Mike de Klerk; 24.12.2015
comment
ใช้งานไม่ได้สำหรับฉันเมื่อฉันเผยแพร่โครงการไปยังเซิร์ฟเวอร์ แต่ในโหมดแก้ไขข้อบกพร่องโดยใช้ HostingEnvironment.MapPath ใช้งานได้ - person Hossein Narimani Rad; 21.09.2016
comment
มีข้อกังวลทางสถาปัตยกรรมใดๆ สำหรับการสร้าง ViewBag.Property ในไฟล์ cshtml เองหรือควรให้บริการเนื้อหาของไฟล์นี้จากคอนโทรลเลอร์ ฉันมีไฟล์หลายไฟล์ที่มีข้อความคงที่สำหรับบางหน้า (คนไม่ดี CMS) และฉันไม่คิดว่ามันจะเหมาะกับฐานข้อมูลเพราะข้อมูลจะแทบจะไม่เปลี่ยนแปลงเลย - person DtechNet; 13.02.2017

ตกลงวิธีนี้ใช้ได้ผลสำหรับฉัน (VS2017)

  1. ตั้งค่า Build Action ของ file.txt เป็น เนื้อหา
  2. ตรวจสอบว่าคัดลอกไปยังไดเร็กทอรีเอาต์พุต ไม่ ตั้งค่าเป็น 'ห้ามคัดลอก'
  3. ใช้ HostingEnvironment.MapPath(@"~/App_Data/file.txt") (ขอบคุณความคิดเห็นของ Hong)

    var fileContents = 
        System.IO.File.ReadAllText(HostingEnvironment.MapPath(@"~/App_Data/file.txt"));
    
person Hossein Narimani Rad    schedule 21.09.2016
comment
นี่น่าจะเป็นคำตอบสำหรับปี 2017+ - person MickyD; 23.02.2017