Membaca file dari Folder yang ada dalam proyek


90

Saya memiliki proyek C # (Aplikasi Konsol Windows). Saya telah membuat folder bernama Data inside project. Ada dua file teks di dalam folder Data.

Bagaimana cara membaca file teks dari folder "Data". Saya mencoba hal-hal di bawah ini.

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

Ini adalah kesalahan yang file tidak ditemukan.

Saya telah memeriksa beberapa jawaban Stackoverflow yang diposting sebelumnya dan tidak ada satupun yang berfungsi untuk saya.

Bagaimana saya bisa melanjutkan? Terima kasih!


1
Google "direktori saat ini". Eksekusi tidak perlu dijalankan dari folder kode sumber Anda!
Ondrej Tucny

Apakah Anda menyalin folder data ini ke keluaran saat membangun proyek? Periksa opsi pada file dan perbaiki.
Ravi Y

pengaturannya adalah Salin Selalu ke direktori keluaran.
SKJ

Jawaban:


128

kode di bawah ini harus berfungsi:

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

Folder dan file saya tidak ada di folder assembly: s .. Mengapa demikian?
bohem. Menjadi

33
di Visual Studio, tandai file tersebut dan kemudian setel Build Actionke Content, dan Copy to Output DirectorykeCopy always
Florian Moser

3
Cukup gunakan @ "Data \ Name.txt" menerapkan notasi @FlorianMoser
Alexandr Sargsyan

untuk apa '@' itu?
gumuruh

@ ada yang disebut literal string verbatim, lihat stackoverflow.com/questions/3311988/…
Morbia

34

itu tergantung di mana folder Data Anda

Untuk mendapatkan direktori tempat file .exe berada:

AppDomain.CurrentDomain.BaseDirectory

Untuk mendapatkan direktori saat ini:

Environment.CurrentDirectory

Kemudian Anda dapat menggabungkan jalur direktori Anda ( @"\Data\Names.txt")


18

Jika Anda perlu mendapatkan semua file di folder bernama 'Data', cukup kodekan seperti di bawah ini

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

Sekarang 'Dokumen' terdiri dari larik nama objek lengkap dari dua file teks di folder 'Data' 'Data'.


@Bunyip: Apakah Anda perlu membaca isi file teks atau sekadar mengetahui file yang ada di folder tersebut?
Uthistran Selvaraj

13

Saya memiliki proyek C # (Aplikasi Konsol Windows). Saya telah membuat folder bernama Gambar di dalam proyek. Ada satu file ico bernama MyIcon.ico. Saya mengakses MyIcon.ico di dalam folder Gambar seperti di bawah ini.

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

9

Salin Selalu ke direktori keluaran diatur kemudian coba yang berikut ini:

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

Ini harus menjadi jawaban yang diterima - itu kuat apakah file tersebut ada di perpustakaan atau dalam proyek yang dapat dieksekusi.
Tullochgorum

1

Untuk Xamarin.iOS Anda dapat menggunakan kode berikut untuk mendapatkan konten file jika file tersebut ada.

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

Gunakan Kode ini untuk membaca semua file di folder dan sub-folder juga

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
Tambahkan beberapa teks yang merinci mengapa ini berfungsi / apa fungsinya
Gibolt

1
Meskipun ini mungkin menjawab pertanyaan penulis, ini kekurangan beberapa kata yang menjelaskan dan / atau tautan ke dokumentasi. Potongan kode mentah tidak terlalu membantu tanpa beberapa frase di sekitarnya. Anda juga mungkin menemukan cara menulis jawaban yang bagus sangat membantu. Harap edit jawaban Anda - Dari Ulasan
Nick

-2

Ini sangat membantu saya, jika Anda menggunakan

var dir = Directory.GetCurrentDirectory()

jalur mengisi berada di luar folder saat ini, itu akan memasukkan jalur ini \ bin \ debug Apa yang saya rekomendasikan, adalah Anda dapat menggunakan

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

kemudian cetak nilai dir dan verifikasi jalur yang diberikan kepada Anda

Dengan menggunakan situs kami, Anda mengakui telah membaca dan memahami Kebijakan Cookie dan Kebijakan Privasi kami.
Licensed under cc by-sa 3.0 with attribution required.