1

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

myfile.txt 内容

你好世界 !!!

ABCDEFGHI ... Z

abcdefghi ... 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

4

3 回答 3

1

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

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

于 2013-07-10T19:32:50.147 回答
1

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

于 2013-07-10T19:37:34.200 回答
1

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

该文件位于正确的位置,但 Xcode 正在查看错误的目录。您需要通过更改方案来指定目录。转到 Product -> Scheme -> Edit Scheme,然后在选项中您可以选择您的工作目录,您应该将其更改为您的项目文件夹。然后它应该正确读取文件。

于 2013-07-10T21:45:36.150 回答