อ่านไฟล์จากโฟลเดอร์ที่มีอยู่ในโครงการ


90

ฉันมีโครงการ C # (แอปพลิเคชันคอนโซล Windows) ฉันได้สร้างโฟลเดอร์ชื่อData inside project มีไฟล์ข้อความสองไฟล์ภายในโฟลเดอร์ Data

ฉันจะอ่านไฟล์ข้อความจากโฟลเดอร์ "Data" ได้อย่างไร ฉันพยายามด้านล่างสิ่งต่างๆ

string[] files = File.ReadAllLines(@"Data\Names.txt")

แสดงข้อผิดพลาดที่ไม่พบไฟล์

ฉันได้ตรวจสอบคำตอบของ Stackoverflow ที่โพสต์ไว้ก่อนหน้านี้แล้วและไม่มีคำตอบใดที่ใช้ได้กับฉัน

ฉันจะดำเนินการต่อได้อย่างไร? ขอบคุณ!


1
"ไดเรกทอรีปัจจุบัน" ของ Google ไฟล์ปฏิบัติการไม่ได้รันจากโฟลเดอร์ souce code ของคุณโดยไม่จำเป็น!
Ondrej Tucny

คุณกำลังคัดลอกโฟลเดอร์ข้อมูลนี้ไปยังเอาต์พุตเมื่อสร้างโครงการหรือไม่ ตรวจสอบตัวเลือกในไฟล์และแก้ไข
ราวี Y

การตั้งค่าคือคัดลอกเสมอไปยังไดเร็กทอรีเอาต์พุต
SKJ

คำตอบ:


128

โค้ดด้านล่างควรใช้งานได้:

string path = Path.Combine(Path.GetDirectoryName(Assembly.GetExecutingAssembly().Location), @"Data\Names.txt");
string[] files = File.ReadAllLines(path);

โฟลเดอร์และไฟล์ของฉันไม่มีอยู่ในโฟลเดอร์แอสเซมบลี: s .. ทำไมถึงเป็นเช่นนั้น?
bohem.be

33
ใน Visual Studio ทำเครื่องหมายไฟล์จากนั้นตั้งค่าBuild Actionเป็นContentและCopy to Output Directoryเป็นCopy always
Florian Moser

3
เพียงใช้ @ "Data \ Name.txt" โดยใช้ @FlorianMoser notation
Alexandr Sargsyan

'@' หมายถึงอะไร
gumuruh

@ เรียกว่าสตริงคำต่อคำตามตัวอักษรดูstackoverflow.com/questions/3311988/…
Morbia

34

ขึ้นอยู่กับโฟลเดอร์ Data ของคุณ

ในการรับไดเร็กทอรีที่เป็นไฟล์. exe:

AppDomain.CurrentDomain.BaseDirectory

ในการรับไดเร็กทอรีปัจจุบัน:

Environment.CurrentDirectory

จากนั้นคุณสามารถเชื่อมเส้นทางไดเรกทอรีของคุณ ( @"\Data\Names.txt")


18

หากคุณต้องการรับไฟล์ทั้งหมดในโฟลเดอร์ชื่อ 'Data' เพียงแค่ตั้งรหัสตามด้านล่าง

string[] Documents = System.IO.Directory.GetFiles("../../Data/");

ตอนนี้ 'Documents' ประกอบด้วยอาร์เรย์ของชื่ออ็อบเจ็กต์ที่สมบูรณ์ของไฟล์ข้อความสองไฟล์ในโฟลเดอร์ 'Data' 'Data'


@ Bunyip: คุณจำเป็นต้องอ่านเนื้อหาของไฟล์ข้อความหรือเพียงแค่รู้ไฟล์ในโฟลเดอร์
Uthistran Selvaraj

13

ฉันมีโครงการ C # (แอปพลิเคชันคอนโซล Windows) ฉันได้สร้างโฟลเดอร์ชื่อรูปภาพภายในโครงการ มีไฟล์ ico หนึ่งไฟล์ชื่อว่า MyIcon.ico ฉันเข้าถึง MyIcon.ico ภายในโฟลเดอร์รูปภาพดังต่อไปนี้

this.Icon = new Icon(@"../../Images/MyIcon.ico");

9

คัดลอกไปที่ไดเร็กทอรีเอาต์พุตเสมอจากนั้นลองทำดังต่อไปนี้:

 Directory.SetCurrentDirectory(AppDomain.CurrentDomain.BaseDirectory);
 String Root = Directory.GetCurrentDirectory();

นี่ควรเป็นคำตอบที่ยอมรับได้ - มีประสิทธิภาพไม่ว่าไฟล์จะอยู่ในไลบรารีหรือในโครงการปฏิบัติการ
Tullochgorum

1

สำหรับ Xamarin.iOS คุณสามารถใช้รหัสต่อไปนี้เพื่อรับเนื้อหาของไฟล์หากไฟล์มีอยู่

var documents = Environment.GetFolderPath(Environment.SpecialFolder.MyDocuments);
var filename = Path.Combine(documents, "xyz.json");
if (File.Exists(filename))
{
var text =System.IO.File.ReadAllText(filename);
}

-1

ใช้รหัสนี้เพื่ออ่านไฟล์ทั้งหมดในโฟลเดอร์และโฟลเดอร์ย่อยด้วย

class Program
{
    static void Main(string[] args)
    {

        getfiles get = new getfiles();
        List<string> files =  get.GetAllFiles(@"D:\Document");

        foreach(string f in files)
        {
            Console.WriteLine(f);
        }


        Console.Read();
    }


}

class getfiles
{
    public List<string> GetAllFiles(string sDirt)
    {
        List<string> files = new List<string>();

        try
        {
            foreach (string file in Directory.GetFiles(sDirt))
            {
                files.Add(file);
            }
            foreach (string fl in Directory.GetDirectories(sDirt))
            {
                files.AddRange(GetAllFiles(fl));
            }
        }
        catch (Exception ex)
        {

            Console.WriteLine(ex.Message);
        }



        return files;
    }
}

-1
string myFile= File.ReadAllLines(Application.StartupPath.ToString() + @"..\..\..\Data\myTxtFile.txt")

3
โปรดเพิ่มข้อความที่มีรายละเอียดว่าเหตุใดจึงได้ผล / ทำงานอย่างไร
Gibolt

1
แม้ว่าสิ่งนี้อาจตอบคำถามของผู้เขียน แต่ก็ไม่มีคำอธิบายและ / หรือลิงก์ไปยังเอกสารประกอบ ข้อมูลโค้ดดิบจะไม่เป็นประโยชน์หากไม่มีวลีบางอย่างรอบตัว คุณอาจพบวิธีเขียนคำตอบที่ดีซึ่งมีประโยชน์มาก โปรดแก้ไขคำตอบของคุณ - จากรีวิว
Nick

-2

สิ่งนี้มีประโยชน์สำหรับฉันหากคุณใช้ไฟล์

var dir = Directory.GetCurrentDirectory()

เส้นทางเติมอยู่นอกเหนือโฟลเดอร์ปัจจุบันมันจะรวมเส้นทางนี้ \ bin \ debug สิ่งที่ฉันแนะนำคุณคือคุณสามารถใช้

string dir = Directory.GetParent(Directory.GetCurrentDirectory()).Parent.Parent.FullName

จากนั้นพิมพ์ค่า dir และตรวจสอบว่าพา ธ ให้คุณ

โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.