Теперь, когда вы изменили свой вопрос, позвольте мне задать один. Какой формат файла, который вы пытаетесь прочитать?
Для двоичного файла требуются некоторые изменения при открытии файла:
/* C way */
FILE *fp = fopen("text.bin", "rb"); /* note the b; this is a compound mode */
/* C++ way */
std::ifstream ifs("test.txt", ios::in | ios::binary);
Читать по содержимому легко. Но помните, у вашего файла в начале 2 целых числа - ширина, высота, которые определяют, сколько еще нужно прочитать, то есть еще одна ширина * высота число целых чисел. Итак, лучше всего сначала прочитать первые два целых числа. Вам нужно будет использовать два буфера - один для ширины и высоты, а затем, в зависимости от их значения, другой для чтения остальной части файла. Итак, давайте прочитаем в первых двух целых числах:
char buf[ 2 * sizeof(int) ]; /* will store width and height */
Читайте в двух целых числах:
/* C way */
fread(buf, sizeof(int), 2, fp); /* the syntax changes, FILE pointer is last */
/* C++ way*/
ifs.read(buf, sizeof buf);
Теперь сложная часть. Вы должны конвертировать материал, чтобы удвоить. Это опять-таки зависит от вашего системного порядкового номера - работает ли простое назначение или требуется ли замена байтов. Как указал другой автор, WriteInt()
записывает целые числа в формате с прямым порядком байтов. Выясните, в какой системе вы находитесь. И тогда вы можете продолжить.
FILE
представляет собой структуру данных C. Он включен в C ++ для совместимости с C. Вы можете сделать это:
/* The C way */
#include <stdio.h>
#include <stdlib.h>
int main(void) {
FILE *fp = fopen("test.txt", "r");
int i = 0;
if (fp) {
fscanf(fp, "%d", &i);
fclose(fp);
}
printf("%d\n", i);
}
Вы можете использовать std::ifstream
, чтобы открыть файл для чтения. Вы должны прочитать содержимое, используя другое заклинание, чтобы прочитать содержимое файла и извлечь из него нужную информацию.
/* The C++ way */
#include <fstream>
#include <iostream>
int main() {
std::ifstream ifs("test.txt");
int i = 0;
if (ifs.good()) {
ifs >> i;
}
std::cout << i << std::endl;
}
Обратите внимание, что вы можете использовать функции стиля C в C ++, хотя это наименее рекомендуемый способ:
/* The C way in C++ */
#include <cstdio>
#include <cstdlib>
int main() {
using namespace std;
FILE *fp = fopen("test.txt", "r");
int i = 0;
if (fp) {
fscanf(fp, "%d", &i);
fclose(fp);
}
printf("%d\n", i);
}
[ Примечание: В обоих примерах предполагается, что у вас есть текстовый файл для чтения]