Leia os arquivos de uma pasta presente no projeto


87

Eu tenho um projeto C # (aplicativo de console do Windows). Eu criei uma pasta chamada Data dentro do projeto. Existem dois arquivos de texto dentro da pasta Data.

Como posso ler os arquivos de texto da pasta "Dados". Eu tentei coisas abaixo.

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

É este o erro de arquivo não encontrado.

Eu verifiquei algumas respostas Stackoverflow postadas antes e nenhuma delas está funcionando para mim.

Como posso continuar? Obrigado!


1
Google "diretório atual". O executável não roda necessariamente de sua pasta de código de origem!
Ondrej Tucny

Você está copiando esta pasta de dados para a saída ao construir o projeto? Verifique as opções nos arquivos e corrija-as.
Ryadavilli

a configuração é Copiar sempre para o diretório de saída.
SKJ

Respostas:


122

o código abaixo deve funcionar:

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

Minha pasta e meus arquivos não existem na pasta de montagem: s .. Por que isso?
bohem.be

33
no Visual Studio, marque o arquivo e defina Build Actioncomo Content, e Copy to Output DirectorycomoCopy always
Florian Moser

3
Basta usar @ "Data \ Name.txt" aplicando a notação @FlorianMoser
Alexandr Sargsyan

para que serve esse '@'?
gumuruh

@ lá é chamado literal de string literal, consulte stackoverflow.com/questions/3311988/…
Morbia

34

depende de onde está sua pasta de dados

Para obter o diretório onde está o arquivo .exe:

AppDomain.CurrentDomain.BaseDirectory

Para obter o diretório atual:

Environment.CurrentDirectory

Então você pode concatenar o caminho do seu diretório ( @"\Data\Names.txt")


18

Se você precisar obter todos os arquivos da pasta chamada 'Dados', basta codificar como abaixo

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

Agora, os 'Documentos' consistem em uma matriz de nome de objeto completo de dois arquivos de texto na pasta 'Dados' 'Dados'.


@Bunyip: você precisa ler o conteúdo do arquivo de texto ou apenas conhecer os arquivos da pasta?
Uthistran Selvaraj

13

Eu tenho um projeto C # (aplicativo de console do Windows). Eu criei uma pasta chamada Imagens dentro do projeto. Existe um arquivo ico chamado MyIcon.ico. Eu acessei o MyIcon.ico dentro da pasta Images como abaixo.

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

9

Copiar sempre para o diretório de saída é definido e tente o seguinte:

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

Esta deve ser a resposta aceita - é robusta se o arquivo está em uma biblioteca ou no projeto executável.
Tullochgorum

0

Para Xamarin.iOS, você pode usar o código a seguir para obter o conteúdo do arquivo, se ele existir.

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

Use este código para ler todos os arquivos em pastas e subpastas também

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
Adicione algum texto detalhando por que isso funciona / o que faz
Gibolt

1
Embora possa responder à pergunta do autor, faltam algumas palavras explicativas e / ou links para a documentação. Os snippets de código bruto não são muito úteis sem algumas frases em torno deles. Você também pode descobrir como escrever uma boa resposta muito útil. Por favor edite sua resposta - Do comentário
Nick

-1

Use isso, está funcionando.

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

Observação: você precisa ter certeza de definir as propriedades do arquivo test.jsoncomo

"Build Action" = "Conteúdo"

"Copiar para diretório de saída" = "Copiar sempre"


Ao responder a uma pergunta antiga, sua resposta seria muito mais útil para outros usuários do StackOverflow se você incluísse algum contexto para explicar como sua resposta ajuda, especialmente para uma pergunta que já tem uma resposta aceita. Veja: Como escrevo uma boa resposta .
David Buck

-2

Isso foi útil para mim, se você usar o

var dir = Directory.GetCurrentDirectory()

o preenchimento do caminho está além da pasta atual, irá incluir este caminho \ bin \ debug O que eu recomendo é que você pode usar

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

em seguida, imprima o valor dir e verifique se o caminho está fornecendo

Ao utilizar nosso site, você reconhece que leu e compreendeu nossa Política de Cookies e nossa Política de Privacidade.
Licensed under cc by-sa 3.0 with attribution required.