读取文件流返回 null - 不确定可能出了什么问题

问题描述 投票:0回答:1

我正在尝试读取文件并打印内容。 由于某种原因,当我将鼠标悬停在输入上时,我看到 null。 我已确认该文件的路径是有效的。 有什么想法吗?我使用的是c++ 14,它是VS社区版附带的。

#include <iostream>
#include <fstream>
#include <stdlib.h>
#include <string>
#include "ConsoleAppTest.h"

using namespace std;
using namespace N;

int main()
{
    std::cout << "Hello World!\n";
    string sReadFile = "C:\\Users\\Michele\\source\\repos\\ConsoleAppTest\\ConsoleAppTest\\readFile.txt";// = "";
    std::cout << sReadFile; //looks good and link opens file in explorer
    std::ifstream input(sReadFile);
    
}

我在网上找到了以下示例,并且正在以同样的方式执行此操作。

我的计划是循环遍历这些行并将每一行打印到控制台输出。

谢谢!

更新: 我按照下面的示例链接中的建议尝试了此操作,但文件无法打开,因此打印了错误消息。当我可以打开 cout 中打印的文件时,我不确定是什么导致它无法打开。

int main()
{
    std::cout << "Hello World!\n";
    ConsoleAppTest cats;
    string sReadFile = "C:\\Users\\Michele\\source\\repos\\ConsoleAppTest\\ConsoleAppTest\\readFile.txt";// = "";
    std::cout << sReadFile;
    std::ifstream myfile;
    myfile.open(sReadFile);
    if (myfile.fail())
    {
        cerr << "Error opening file" << endl;
        myfile.close();
    }
    string line;
    while (getline(myfile, line))
    {
        cout << line << endl;
    }
    myfile.close();
    
    return 0;
}

更新2: 尝试分离文件和路径,并使用当前路径,该路径看起来与文件所在的目录相同(不是执行的 dir/bin 文件夹)。对于存在它仍然返回 0。

...
namespace fs = std::experimental::filesystem;
...
std::cout << "Hello World!\n";
ConsoleAppTest cats;
fs::path currentPath = fs::current_path();
string filename = "readFile.txt";
fs::path filepath = currentPath / filename;
std::ifstream file(filepath);
std::cout << fs::exists(filepath); //returns 0
c++ ifstream
1个回答
0
投票

我发现,尽管我可以在文件位置的文件资源管理器中看到该文件,但当我转到那里的命令行并列出目录时,文件名实际上是 readFile.txt.txt。 它显示为文本文件类型的 readFile.txt。 我重命名了该文件并删除了多余的 .txt,代码找到了它。 感谢大家的帮助!

© www.soinside.com 2019 - 2024. All rights reserved.