c++ - vs2008,vs2015无法读取文件: weird behaviour

标签 c++ visual-studio permissions fstream permission-denied

当我尝试使用 ifstream 读取文件时,我在同时使用 VS2008 和 VS2015 的 Windows 10 环境中遇到了一个非常奇怪的行为。

我正在使用以下简单代码:

#include "stdafx.h"
#include <fstream>
#include <iostream>
#include <string>

int main()
{
    std::ifstream ifs("C:\\Users\\dd\\Desktop\\test.txt");
    if(ifs.is_open())
    {
        std::string line;
        while(std::getline(ifs,line))
        {
            std::cout << line << "\n";
        }
    }
    else
    {
        std::cout << std::strerror(errno) << "\n";
    }

    return 0;
}

显然该文件存在。

当我尝试读取文件 .txt 时,我得到:

Permission denied

我以管理员身份运行 Visual Studio,我有权读取该文件,因为我可以使用 Notepad++ 打开它。

如果我更改文件扩展名,例如 .test,我能够正确读取文件内容并且一切都按预期工作。

我卸载并重新安装了 VS2008、VS2015 和所有 C++ Redistributable,但没有任何改变。非常感谢任何帮助!

最佳答案

也许您的文件没有命名为 test.txt。您是否检查过您的文件确实名为 test.txt 而不是 test.txt.txt(带有隐藏的扩展名)?

尝试在命令提示符中列出文件以查看真实文件名是什么: 命令>

  cd C:\Users\dd\Desktop\
  dir | findstr test

其他可能性:

  • test.txt 可能会使用另一个看起来相似的字母 语言(在您的代码或实际文件名中)。

  • 您的代码中没有正确引用斜杠(例如 C:\Users\\ 而不是 C:\\Users\\dd\\)。尝试更改为正斜杠。

关于c++ - vs2008,vs2015无法读取文件: weird behaviour,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/43743020/

相关文章:

c++ - 使用构造函数初始化数组(C++)

c++ - 是否可以以编程方式将 SQLite 数据库转换为 C/C++ 中的 SQL 语句?

amazon-web-services - 默认情况下将上传的文件公开到 S3

javascript - Facebook Graph API 好友的姓名和 ID

c++ - 数组递归;无法获得正确的返回值

c++ - 放大率低于 125% 默认 Win API(101 - 124% 之间)

sql-server - SQL Server 错误预期 1 个导出,契约(Contract)名称为 Microsoft.VisualStudio.Utilities.IContentTypeRegistryService

c++ - Visual C++ 6.0 和 Visual C++ 2008 之间有什么区别?

c# - 如何淡出并破坏负载音频

qt - 如何获取在特定目录中创建新文件或修改某个文件的授权信息?