Читання файлів з папки, присутньої в проекті


87

У мене є проект C # (консольна програма Windows). Я створив папку з назвою Дані всередині проекту. У папці Data є два текстові файли.

Як я можу прочитати текстові файли з папки "Дані". Я спробував нижче речі.

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

Помилка прив’язки, що файл не знайдено.

Я перевірив деякі відповіді на Stackoverflow, розміщені раніше, і жоден з них не працює для мене.

Як я можу продовжити? Дякую!


1
Google "поточний каталог". Виконавчий файл не обов'язково запускається з папки коду souce!
Ondrej Tucny

Ви копіюєте цю папку даних у вихідні дані під час створення проекту? Перевірте параметри файлів та виправте їх.
ryadavilli

налаштування - Копіювати завжди у вихідний каталог.
SKJ

Відповіді:


122

код нижче повинен працювати:

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
Олександр Саргсян

для чого означає "@"?
gumuruh

@ Там називається дослівне строковий літерал, см stackoverflow.com/questions/3311988 / ...
Morbia

34

це залежить від того, де знаходиться ваша папка даних

Щоб отримати каталог, де знаходиться файл .exe:

AppDomain.CurrentDomain.BaseDirectory

Щоб отримати поточний каталог:

Environment.CurrentDirectory

Тоді ви можете об'єднати шлях до каталогу ( @"\Data\Names.txt")


18

Якщо вам потрібно отримати всі файли в папці з назвою "Дані", просто закодуйте їх, як показано нижче

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

Тепер «Документи» складаються з масиву повного імені об’єкта двох текстових файлів у папці «Дані» «Дані».


@Bunyip: вам потрібно прочитати вміст текстового файлу або просто знати файли в папці?
Uthistran Selvaraj

13

У мене є проект C # (консольна програма Windows). Я створив папку з назвою Images у проекті. Існує один файл ico, який називається MyIcon.ico. Я отримав доступ до MyIcon.ico всередині папки "Зображення", як показано нижче.

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

9

Копіювати завжди до каталогу виводу встановлено, спробуйте наступне:

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

Це має бути прийнятою відповіддю - вона надійна, незалежно від того, знаходиться файл у бібліотеці чи у виконуваному проекті.
Tullochgorum

0

Для 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
Будь ласка, додайте текст із детальною інформацією, чому це працює / що це робить
Гіболт,

1
Незважаючи на те, що це може відповісти на питання авторів, у ньому відсутні деякі пояснювальні слова та / або посилання на документацію. Фрагменти необробленого коду не дуже корисні без деяких фраз навколо них. Ви також можете виявити дуже корисним написання хорошої відповіді . Будь ласка, відредагуйте свою відповідь - З огляду
Нік

-1

Використовуйте це, це працює.

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

Зверніть увагу: Вам потрібно переконатися, що властивості файлу встановлені test.jsonяк

"Build Action" = "Вміст"

"Copy to Output Directory" = "Копіювати завжди"


Відповідаючи на старе запитання, ваша відповідь була б набагато кориснішою для інших користувачів StackOverflow, якщо ви включили якийсь контекст, щоб пояснити, як допомагає ваша відповідь, особливо на питання, яке вже має прийняту відповідь. Дивіться: Як написати хорошу відповідь .
Девід Бак,

-2

Це було корисно для мене, якщо ви використовуєте

var dir = Directory.GetCurrentDirectory()

заповнення шляху буде за поточною папкою, він буде містити цей шлях \ bin \ debug. Я вам рекомендую, це те, що ви можете використовувати

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

потім надрукуйте значення dir і перевірте шлях, який вам надає

Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.