запись/чтения файла с диска
От: kot--  
Дата: 17.05.06 06:17
Оценка:
не подскажет ли олл ответ на ламерский вопрос? я раньше программировал на фортране, теперь в проекте приходится и на С/С++.

есть файл бинарный на диске. задача считать его в память (в массив какой-то) по заданному указателем адресу и вернуть его размер, а затем записать и3 памяти в файл.

знаю, вопрос смешной, но не для новичка в С/С++ ;(






17.05.06 14:40: Перенесено модератором из 'Алгоритмы' — Кодт
---------------
c уважением, мохнато-полосатый kot--
Re: запись/чтения файла с диска
От: Ranger_XL  
Дата: 17.05.06 11:41
Оценка:
K> есть файл бинарный на диске. задача считать его в память (в массив какой-то) по заданному указателем адресу и вернуть его размер, а затем записать и3 памяти в файл.

#include <fstream>
#include <algorithm>
using namespace std;

const int MAX_SIZE = 1000000;
char buf[ MAX_SIZE + 1];

int main()
{
    ifstream fin ("1.txt", ios::in | ios::binary);
    fin.read (buf, MAX_SIZE);
    int num_read = fin.gcount();
    fin.close();

    ofstream fout ("2.txt", ios::out | ios::binary);
    fout.write (buf, num_read);
    fout.close();
}
Re: запись/чтения файла с диска
От: saddva  
Дата: 17.05.06 12:11
Оценка:
Здравствуйте, kot--, Вы писали:


K> не подскажет ли олл ответ на ламерский вопрос? я раньше программировал на фортране, теперь в проекте приходится и на С/С++.


K> есть файл бинарный на диске. задача считать его в память (в массив какой-то) по заданному указателем адресу и вернуть его размер, а затем записать и3 памяти в файл.


K> знаю, вопрос смешной, но не для новичка в С/С++ ;(


Если не использовать потоки из <fstream>, то примерно так:
int main()
{
    FILE* pFileR = fopen("file_in.dat", "rb"); // r - read, b - binary
    int fileDescriptor = _fileno(pFileR);
    long fileLength = _filelength(fileDescriptor); // return the file length, in bytes

    long size = fileLength / sizeof(int); // there are integer values in file
    int* arr = new int[size];

    fread(arr, sizeof(int), size, pFileR);
    
    fclose(pFileR);
    
    FILE* pFileW = fopen("file_out.dat", "wb"); // w - write, b - binary
    fwrite(arr, sizeof(int), size, pFileW);
    fclose(pFileW);

    delete[] arr;
    return 0;
}
Re: запись/чтения файла с диска
От: Ubivetz Украина  
Дата: 17.05.06 12:42
Оценка:
Здравствуйте, kot--, Вы писали:


K> не подскажет ли олл ответ на ламерский вопрос? я раньше программировал на фортране, теперь в проекте приходится и на С/С++.


K> есть файл бинарный на диске. задача считать его в память (в массив какой-то) по заданному указателем адресу и вернуть его размер, а затем записать и3 памяти в файл.


K> знаю, вопрос смешной, но не для новичка в С/С++ ;(

[msdn]
FREAD(3) Linux Programmer's Manual FREAD(3)

NAME
fread, fwrite — binary stream input/output

SYNOPSIS
#include <stdio.h>

size_t fread(void *ptr, size_t size, size_t nmemb, FILE *stream);

size_t fwrite(const void *ptr, size_t size, size_t nmemb, FILE *stream);

DESCRIPTION
The function fread reads nmemb elements of data, each size bytes long, from the stream
pointed to by stream, storing them at the location given by ptr.

The function fwrite writes nmemb elements of data, each size bytes long, to the stream
pointed to by stream, obtaining them from the location given by ptr.

For non-locking counterparts, see unlocked_stdio(3).

RETURN VALUE
fread and fwrite return the number of items successfully read or written (i.e., not the num­
ber of characters). If an error occurs, or the end-of-file is reached, the return value is
a short item count (or zero).

fread does not distinguish between end-of-file and error, and callers must use feof(3) and
ferror(3) to determine which occurred.

CONFORMING TO
The functions fread and fwrite conform to ANSI X3.159-1989 (``ANSI C'').
[/msdn]
....
FILE * fp = fopen ("Somefile.dat", "r+b" );
if ( !fp )
{
  fprintf( stderr, "Couldn't open file..." );
  return;
  // Для определения причины, почему файл не может быть открыт юзай функцию access()
}
  char buf[512];
  int bytes_read;
  while ( (bytes_read = fread( buf, 512, 1, fp ))  )
  {
     // Куда-то копируем, любуемся или что- то там делаем с данными
  }
Эх, люблю выпить и переспать с кем нибудь!
Но чаще выходит перепить с кем — нибудь и выспаться...
 
Подождите ...
Wait...
Пока на собственное сообщение не было ответов, его можно удалить.