Đọc tệp từ một Thư mục có trong dự án


87

Tôi có một dự án C # (Ứng dụng Bảng điều khiển Windows). Tôi đã tạo một thư mục có tên là Dữ liệu bên trong dự án. Có hai tệp văn bản bên trong thư mục Dữ liệu.

Làm cách nào để đọc các tệp văn bản từ thư mục "Dữ liệu". Tôi đã thử những thứ dưới đây.

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

Đó là lỗi không tìm thấy tệp.

Tôi đã kiểm tra một số câu trả lời Stackoverflow được đăng trước đây và không câu trả lời nào trong số đó phù hợp với tôi.

Tôi có thể tiếp tục như thế nào? Cảm ơn!


1
Google "thư mục hiện tại". Tệp thực thi không chạy liên tục từ thư mục mã souce của bạn!
— Ondrej Tucny

Bạn có đang sao chép thư mục dữ liệu này vào đầu ra khi xây dựng dự án không? Kiểm tra các tùy chọn trên tệp teh và sửa nó.
— ryadavilli

cài đặt là Sao chép Luôn luôn vào thư mục đầu ra.
— SKJ

Câu trả lời:


122

mã dưới đây sẽ hoạt động:

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

Thư mục và tệp của tôi không tồn tại trong thư mục lắp ráp: s .. Tại sao vậy?
— bohem.be

33
trong Visual Studio, đánh dấu các tập tin và sau đó đặt Build Actionđể Content, và Copy to Output DirectoryđểCopy always
— Florian Moser

3
Chỉ cần sử dụng @ "Data \ Name.txt" áp dụng ký hiệu @FlorianMoser
— Alexandr Sargsyan

'@' nghĩa là gì?
— gumuruh

@ có được gọi là chuỗi nguyên văn theo nghĩa đen, xem stackoverflow.com/questions/3311988/…
— Morbia,

34

nó phụ thuộc vào thư mục Dữ liệu của bạn ở đâu

Để lấy thư mục chứa tệp .exe:

AppDomain.CurrentDomain.BaseDirectory

Để lấy thư mục hiện tại:

Environment.CurrentDirectory

Sau đó, bạn có thể nối đường dẫn thư mục của mình ( @"\Data\Names.txt")


18

Nếu bạn cần lấy tất cả các tệp trong thư mục có tên 'Dữ liệu', chỉ cần mã nó như bên dưới

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

Bây giờ 'Tài liệu' bao gồm một mảng tên đối tượng hoàn chỉnh của hai tệp văn bản trong thư mục 'Dữ liệu' 'Dữ liệu'.


@Bunyip: bạn cần đọc nội dung của tệp văn bản hay chỉ để biết các tệp trong thư mục?
— Uthistran Selvaraj 7/12/12

13

Tôi có một dự án C # (Ứng dụng Bảng điều khiển Windows). Tôi đã tạo một thư mục có tên là Hình ảnh bên trong dự án. Có một tệp ico tên là MyIcon.ico. Tôi đã truy cập MyIcon.ico bên trong thư mục Hình ảnh như bên dưới.

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

9

Sao chép Luôn luôn vào thư mục đầu ra được đặt, sau đó thử các bước sau:

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

Đây phải là câu trả lời được chấp nhận - nó chắc chắn cho dù tệp nằm trong thư viện hay trong dự án thực thi.
— Tullochgorum

0

Đối với Xamarin.iOS, bạn có thể sử dụng mã sau để lấy nội dung của tệp nếu tệp tồn tại.

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

Sử dụng Mã này để đọc tất cả các tệp trong thư mục và cả thư mục con

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
Vui lòng thêm một số văn bản quy định chi tiết lý do tại sao công trình này / những gì nó làm
— Gibolt

1
Mặc dù điều này có thể trả lời câu hỏi của các tác giả, nhưng nó thiếu một số từ giải thích và / hoặc liên kết đến tài liệu. Các đoạn mã thô không hữu ích lắm nếu không có một số cụm từ xung quanh chúng. Bạn cũng có thể thấy cách viết một câu trả lời hay rất hữu ích. Vui lòng chỉnh sửa câu trả lời của bạn - Từ Đánh giá
— Nick

-1

Sử dụng cái này, nó đang hoạt động.

string path = Path.Combine(Path.GetDirectoryName(Assembly.GetExecutingAssembly().Location), @"TestData\test.json");
var response = JsonConvert.DeserializeObject<Response>(File.ReadAllText(path));

Xin lưu ý: Bạn cần đảm bảo rằng đặt các thuộc tính của tệp test.jsonlà

"Xây dựng Hành động" = "Nội dung"

"Copy to Output Directory" = "Sao chép luôn"


Khi trả lời một câu hỏi cũ, câu trả lời của bạn sẽ hữu ích hơn nhiều đối với những người dùng StackOverflow khác nếu bạn bao gồm một số ngữ cảnh để giải thích câu trả lời của bạn giúp ích như thế nào, đặc biệt đối với một câu hỏi đã có câu trả lời được chấp nhận. Xem: Làm thế nào để tôi viết một câu trả lời tốt .
— David Buck

-2

Điều này rất hữu ích cho tôi, nếu bạn sử dụng

var dir = Directory.GetCurrentDirectory()

điền đường dẫn nằm ngoài thư mục hiện tại, nó sẽ bao gồm đường dẫn này \ bin \ debug Điều mà tôi khuyên bạn, là bạn có thể sử dụng

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

sau đó in giá trị dir và xác minh đường dẫn đang cung cấp cho bạn

Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookie và Chính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.