1
resposta

banco de palavras não abre mesmo estando no mesmo diretório

Mesmo lendo as dúvidas dessa aula eu ainda não consegui abrir o banco de palavras no projeto. Já verifiquei que ele estava na mesma pasta que os outros arquivos e pesquisei no google sobre o assunto, porém não entendi o motivo ainda. Alguém poderia me ajudar?

Print código do arquivo le_arquivo.cpp no VS

saida do programa da forca no terminal mostrando erro

1 resposta

Oi Vinicius,

O problema está na forma como o programa está buscando o arquivo "palavras.txt". Quando você usa arquivo.open("palavras.txt"), o programa procura o arquivo no diretório de execução, que nem sempre é o mesmo onde o código fonte está.

Para resolver isso, você pode fazer o seguinte:

  1. Verifique o diretório de execução: Certifique-se de que o arquivo "palavras.txt" está no mesmo diretório onde o executável do seu programa está sendo gerado. Normalmente, o executável fica dentro de uma pasta "Debug" ou "Release" dentro da pasta do seu projeto.
  2. Use um caminho relativo: Em vez de apenas "palavras.txt", você pode usar um caminho relativo a partir do diretório do seu projeto. Por exemplo, se o arquivo "palavras.txt" estiver na mesma pasta do seu arquivo .cpp, você pode usar "./palavras.txt" ou "palavras.txt". Se estiver em uma subpasta, use "subpasta/palavras.txt".
  3. Use um caminho absoluto: Se você quiser ter certeza de que o arquivo será encontrado, pode usar um caminho absoluto, como "C:/Users/seu_usuario/seu_projeto/palavras.txt". No entanto, essa abordagem torna seu código menos portátil, pois o caminho pode variar em diferentes máquinas.

Exemplo prático:

#include <iostream>
#include <fstream>
#include <vector>
#include <string>

std::vector<std::string> le_arquivo() {
    std::ifstream arquivo;
    arquivo.open("./palavras.txt"); // Usando caminho relativo

    if (arquivo.is_open()) {
        int quantidade_palavras;
        arquivo >> quantidade_palavras;

        std::vector<std::string> palavras_do_arquivo;
        for (int i = 0; i < quantidade_palavras; i++) {
            std::string palavra_lida;
            arquivo >> palavra_lida;
            palavras_do_arquivo.push_back(palavra_lida);
        }
        arquivo.close();
        return palavras_do_arquivo;
    } else {
        std::cout << "Não foi possível acessar o banco de palavras." << std::endl;
        exit(0);
    }
}

Para saber mais: Trabalhando com arquivos em C++ 💪

Continue praticando e explorando as possibilidades da linguagem! 💻 🤔