ifstream ничего не читает - PullRequest
       5

ifstream ничего не читает

0 голосов
/ 26 февраля 2020

Я пишу код на C ++, и мне нужно прочитать файл, проблема в том, что моя файловая структура немного сложна, и я просто не могу понять, как использовать свой ifstream для его чтения. Я думаю, что перепробовал все возможные комбинации ... но это просто не работает, я думаю, что я делаю что-то не так, но я не могу понять это.

Вот минимальное воспроизведение моей проблемы.

структура:

.
├── build
├── CMakeLists.txt
└── src
    ├── file
    │   └── test.txt
    ├── load
    │   └── loadfile.hpp
    └── main.cpp

CMakeLists.txt:

cmake_minimum_required(VERSION 3.10)
project(BaseProject)

set(CMAKE_CXX_STANDARD 17)
set(CMAKE_CXX_FLAGS "-O3 -g -std=c++17 -Wall -Wextra -pedantic")

file(GLOB SRC
        "src/*.h"
        "src/*.hpp"
        "src/load/*.h"
        "src/load/*.hpp"
        "src/load/*.cpp"
        )

add_executable(exec ${SRC} src/main.cpp)

main. cpp

#include "load/loadfile.hpp"

int main(){
    load();
    return 0;
}

test.txt: (не очень хорошо, но не очень)

test

loadfile.hpp

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

void loadFile(const std::string& file){
    std::ifstream i(file, std::ifstream::in);
    std::string str;
    i >> str;
    std::cerr << str;
    i.close();
}

void load(){
    loadFile("../file/test.txt");
}

вывод пуст и программа завершается нормально.

1 Ответ

0 голосов
/ 26 февраля 2020

Это может помочь, когда вы вызываете install, ваши файлы будут скопированы в указанное место назначения.

cmake_minimum_required(VERSION 3.10)
project(BaseProject)

set(CMAKE_CXX_STANDARD 17)
set(CMAKE_CXX_FLAGS "-O3 -g -std=c++17 -Wall -Wextra -pedantic")
set(OUTPUT_DIR "Yours to fill, working dir")

file(GLOB RESOURCES "./file/test.txt")

file(GLOB SRC
        "src/*.h"
        "src/*.hpp"
        "src/load/*.h"
        "src/load/*.hpp"
        "src/load/*.cpp"
        )

add_executable(exec ${SRC} src/main.cpp)

install (FILES ${RESOURCES} DESTINATION ${OUTPUT_DIR})
...