Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/cplusplus/132.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# C++;文件i/o错误?_C#_C++_File_Io - Fatal编程技术网

C# C++;文件i/o错误?

C# C++;文件i/o错误?,c#,c++,file,io,C#,C++,File,Io,为什么所有内容都被读取为0 int width = 5; int height = 5; int someTile = 1; char buff[128]; ifstream file("test.txt", ios::in|ios::binary); if(file.is_open()) { cout << "open"; } file.read(buff, sizeof(int));

为什么所有内容都被读取为0

    int width = 5;
    int height = 5;
    int someTile = 1;
    char buff[128];


    ifstream file("test.txt", ios::in|ios::binary);

    if(file.is_open())
    {
        cout << "open";
    }

    file.read(buff, sizeof(int));
    width = atoi(buff);

    file.read(buff, sizeof(int));
    height = atoi(buff);

    for (int x = 0; x < width; x++) {
        for (int y = 0; y < height; y++) {
            file.read(buff, sizeof(int));
            someTile = atoi(buff);
            cout << someTile;
        }
    }
int-width=5;
整数高度=5;
int-someTile=1;
字符buff[128];
ifstream文件(“test.txt”,ios::in | ios::binary);
if(file.is_open())
{

cout在不知道test.txt的内容的情况下,很难准确地说出来,但看起来您正在重复读取4个字节(大多数平台上的大小为int)除非你的文件是完全由以null结尾的四个字节块构成的,否则我不认为这会起作用

更新:好的,看看你的文件格式,你不是在写字符串,而是在写整数。因此,我希望你能够直接读入你的数字,而不需要
atoi

例如:

int value;
file.read((char*)&value, sizeof(int));
value
现在应该包含文件中的数字。要转换整个示例,您需要以下内容:

FileStream stream = new FileStream("test.txt", FileMode.Create);
            BinaryWriter writer = new BinaryWriter(stream);
            // write a line of text to the file

            writer.Write(15);
            writer.Write(5);

            for (int i = 0; i < 15; i++)
            {
                for (int j = 0; j < 5; j++)
                {
                    writer.Write(1);
                }
            }

            // close the stream
            writer.Close();
int width = 5;
int height = 5;
int someTile = 1;

ifstream file("test.txt", ios::in|ios::binary);

if(file.is_open())
{
    cout << "open";

    file.read(reinterpret_cast<char*>(&width), sizeof(int));
    file.read(reinterpret_cast<char*>(&height), sizeof(int));

    for (int x = 0; x < width; x++) {
        for (int y = 0; y < height; y++) {
            file.read(reinterpret_cast<char*>(&someTime), sizeof(int));
            cout << someTile;
        }
    }
}
int-width=5;
整数高度=5;
int-someTile=1;
ifstream文件(“test.txt”,ios::in | ios::binary);
if(file.is_open())
{

cout
atoi
将以NUL结尾的字符串转换为整数-您正在从文件中读取四个字节(它处于二进制模式)-这可能不正确

例如,一个有效的字符串(对于
atoi
来说可以是“1234”-注意:NUL终止),但是它的字节表示是0x31 0x32 0x33 0x34(注意,如果您只读取4个字节,NUL终止,那么,
atoi
可以执行任何操作)。此文件的格式是什么?如果它真的是字节表示,则数字1234看起来像(取决于endianess),0x00 0x00 0x04 0xD2,正确读取此
int
的方法是逐字节移位


所以,一个大问题-格式是什么?

不要吹毛求疵,但您不需要ios::in和ifstream,它已经被定义为输入。如果文件打开失败,会发生什么情况,您仍然尝试读取数据。看起来您是以二进制模式打开文件,但随后以文本模式处理数据。为什么不以文本模式打开文件呢首先?我可能有一个更简单的解决方案,但因为我不确定,所以我发布了它。| 45 |错误:调用'std::basic_ifstream::read(int*,unsigned int')时没有匹配的函数。当我尝试时,仍然得到相同的错误。调用'std::basic_ifstream::read(int*,unsigned int)时没有匹配的函数“好的,看起来我需要为ifstream进行一些强制转换,但我没有意识到它只有char*方法。我更喜欢在IO中使用plain
fopen
/
fread
。看看这是否有效。注意:上述方法不可移植。@Simon,还有big/little endian。