Czytaj pliki z folderu obecnego w projekcie


87

Mam projekt C # (aplikacja konsoli systemu Windows). Utworzyłem folder o nazwie Data inside project. W folderze Data znajdują się dwa pliki tekstowe.

Jak mogę odczytać pliki tekstowe z folderu „Data”. Próbowałem poniżej rzeczy.

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

Błąd, że nie znaleziono pliku.

Sprawdziłem niektóre odpowiedzi Stackoverflow opublikowane wcześniej i żadna z nich nie działa dla mnie.

Jak mam postępować? Dzięki!


1
„Bieżący katalog” Google. Plik wykonywalny nie jest zawsze uruchamiany z folderu kodu źródłowego!
Ondrej Tucny

Czy kopiujesz ten folder danych do danych wyjściowych podczas tworzenia projektu? Sprawdź opcje plików i popraw je.
ryadavilli

ustawienie to Zawsze kopiuj do katalogu wyjściowego.
SKJ

Odpowiedzi:


122

poniższy kod powinien działać:

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

Mój folder i pliki nie istnieją w folderze zespołu: s .. Dlaczego?
bohem.be

33
w Visual Studio, zaznacz plik, a następnie ustawić Build Actionsię Contenti Copy to Output DirectorydoCopy always
Florian Moser

3
Po prostu użyj @ „Data \ Name.txt” stosując notację @FlorianMoser
Alexandr Sargsyan,

co to znaczy „@”?
gumuruh

@ jest nazywany dosłownym literałem ciągu, patrz stackoverflow.com/questions/3311988/ ...
Morbia,

34

to zależy, gdzie jest twój folder danych

Aby uzyskać katalog, w którym znajduje się plik .exe:

AppDomain.CurrentDomain.BaseDirectory

Aby uzyskać bieżący katalog:

Environment.CurrentDirectory

Następnie możesz połączyć ścieżkę katalogu ( @"\Data\Names.txt")


18

Jeśli chcesz pobrać wszystkie pliki w folderze o nazwie „Dane”, po prostu zakoduj go, jak poniżej

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

Teraz „Dokumenty” składa się z tablicy pełnej nazwy obiektu dwóch plików tekstowych w folderze „Dane” „Dane”.


@Bunyip: czy musisz przeczytać zawartość pliku tekstowego, czy po prostu poznać pliki w folderze?
Uthistran Selvaraj

13

Mam projekt C # (aplikacja konsoli systemu Windows). Utworzyłem folder o nazwie Obrazy wewnątrz projektu. Jest jeden plik ico o nazwie MyIcon.ico. Dostałem się do MyIcon.ico w folderze Obrazy, jak poniżej.

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

9

Kopiuj zawsze do katalogu wyjściowego, a następnie spróbuj wykonać następujące czynności:

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

To powinna być akceptowana odpowiedź - jest pewne, czy plik znajduje się w bibliotece, czy w projekcie wykonywalnym.
Tullochgorum

0

W przypadku platformy Xamarin.iOS można użyć następującego kodu, aby pobrać zawartość pliku, jeśli plik istnieje.

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

Użyj tego kodu do odczytu wszystkich plików w folderach i podfolderach również

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
Dodaj tekst wyjaśniający, dlaczego to działa / co robi
Gibolt

1
Chociaż może to odpowiedzieć na pytanie autorów, brakuje w nim słów wyjaśniających i / lub linków do dokumentacji. Fragmenty surowego kodu nie są zbyt pomocne bez otaczających je fraz. Może się również okazać, że bardzo pomocne może być napisanie dobrej odpowiedzi . Proszę edytować swoją odpowiedź - Od Przeglądu
Nick

-1

Użyj tego, to działa.

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

Uwaga: Musisz upewnić się, że ustawiłeś właściwości pliku test.jsonna

„Build Action” = „Content”

„Kopiuj do katalogu wyjściowego” = „Kopiuj zawsze”


Odpowiadając na stare pytanie, twoja odpowiedź byłaby znacznie bardziej przydatna dla innych użytkowników StackOverflow, gdybyś zawarł kontekst wyjaśniający, w jaki sposób twoja odpowiedź pomaga, szczególnie w przypadku pytania, na które już została zaakceptowana odpowiedź. Zobacz: Jak napisać dobrą odpowiedź .
David Buck

-2

To było dla mnie pomocne, jeśli używasz

var dir = Directory.GetCurrentDirectory()

wypełnienie ścieżki będzie poza bieżącym folderem, będzie zawierać tę ścieżkę \ bin \ debug. Polecam, abyś mógł użyć

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

następnie wydrukuj wartość dir i sprawdź ścieżkę, którą podaje

Korzystając z naszej strony potwierdzasz, że przeczytałeś(-aś) i rozumiesz nasze zasady używania plików cookie i zasady ochrony prywatności.
Licensed under cc by-sa 3.0 with attribution required.