在一个块中读取C++文件,无法输出内容

Reading a file in C++ in one block, can't output the contents

本文关键字:文件 输出 C++ 读取 一个      更新时间:2023-10-16

我写了一个非常简单的程序,在一个块中读取文本文件的内容,并将其保存到缓冲区中,然后用缓冲区的大小显示该缓冲区的内容,尽管我在Windows 7中编译了确切的代码,但它运行得很好。然而,每当我在mac上编译它时,根本没有缓冲区输出,缓冲区大小返回-1,我在编译期间没有得到任何错误

myfile.txt内容

你好,世界

A B C D E F G H I。。。Z

a b c d e f g h i。。。z

我的代码

#include <iostream>
#include <fstream>
#include <string>
using namespace std;
int main ()
{
    fstream myfile;
    myfile.open("myText.txt");
    myfile.seekg(0,ios::end);
    long int size =  myfile.tellg();
    myfile.clear();
    myfile.seekg(0,ios::beg);
    char* buffer = new (nothrow) char[size];
    myfile.read(buffer,size);
    myfile.close();
     for (int i = 1; i < size;i++ )
         if ((buffer[i]>= 65 && buffer[i] <=90) || (buffer[i] >= 97 && buffer[i] <= 122) ||       buffer[i] == ' ' || buffer[i]== 'n')
              cout << buffer[i];
    cout << size;
    delete [] buffer;
    getchar();
    return 0;

我通过检查了文件读取操作

if(myfile.good() == false)
    cout << "Error openning the file n";
if(myfile.bad() == true)
    cout << "Read/writing error on i/o operation n";
if (myfile.fail() == true)
    cout <<"Logical error on i/o operation n";

我的输出:

打开文件时出错

i/o操作的逻辑错误

-1

我的猜测是你没有打开这个文件:可能它在Windows中工作是因为文件名不区分大小写,而在Mac上是这样。(无论如何,你说你的文件名为myfile.txt,在你的程序中你打开的是myText.txt)

检查您的文件是否已正确打开。

您应该在myfile.open(…)之后测试myfile.good()

很可能是因为它查找错误的路径而没有正确打开文件。上个月我在做一个项目时也遇到了同样的问题。

文件位于正确的位置,但Xcode查找的目录错误。您需要通过更改方案来指定目录。进入"产品"->"方案"->"编辑方案",在选项中可以选择您的工作目录,您应该将其更改为项目文件夹。然后它应该能正确读取文件。