Гость
Целевая тема:
Создать новую тему:
Автор:
Форумы / C++ [игнор отключен] [закрыт для гостей] / Вопрос по произвольному доступу к двоичному файлу в С# / 10 сообщений из 10, страница 1 из 1
20.11.2007, 20:29:47
    #34953472
bigbanka
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Вопрос по произвольному доступу к двоичному файлу в С#
Вопрос в том, как осуществить доступ к конкретному месту двоичного файла, указав с клавиатуры байты. Вся проблема в том, что файл может быть больше 2Гб, следовательно функиции fseek() нельзя использовать, т.к. их действие ограниченно этими самыми 2Гб. Прочитал в книге, что можно использовать функции fgetpos() и fsetpos(), но вот как их применить к кокретному ьпримеру до меня не доходит))). Подскажите как использовать эти, а может и какие-нибудь другие функиции. Вот исходник проги:
#include <stdio.h>
#include <stdlib.h>

int main()
{
int razmer, i, j, k, z, u, g, y, t, e;
FILE *myFile;
//fpos_t filepos;
printf("Vvedite razmer fajla v bajtakh:\n");
t=0;
scanf("%d", &razmer);
if ((razmer%4)!=0) {
y=razmer/4;
razmer=(y+1)*4;
}
j=razmer/4;
if ((myFile=fopen("blin.dat", "wb")) == NULL) {
printf("not be open\n");
}
else {
for ( i=1; i<=j; i++ ) {
k=rand()%300;
fwrite(&k, sizeof(int),1, myFile);
t=t+1;
if (t>=(j/100)) {
printf(".");
t=0;
}
}
fclose (myFile);
}



printf(" \n");
printf("Dlja raspechatki chisel nazhmite 1\n");
scanf("%d", &g);
if (g=1){
if((myFile=fopen("blin.dat", "rb")) == NULL) {
printf("not be open\n");
}
else {
for ( i=1; i<=j; i++) {
fread(&z, sizeof(int),1, myFile);
printf("%d ", z);
}
fclose (myFile);
}
}

scanf("%d", &u);
return 0;
}

Очень нужна ваша помощь, сроки горят((
...
Рейтинг: 0 / 0
20.11.2007, 20:35:19
    #34953479
Tshamіl
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Вопрос по произвольному доступу к двоичному файлу в С#
bigbankaВопрос в том, как осуществить доступ к конкретному месту двоичного файла, указав с клавиатуры байты. Вся проблема в том, что файл может быть больше 2Гб, следовательно функиции fseek() нельзя использовать, т.к. их действие ограниченно этими самыми 2Гб. Прочитал в книге, что можно использовать функции fgetpos() и fsetpos(), но вот как их применить к кокретному ьпримеру до меня не доходит))). Подскажите как использовать эти, а может и какие-нибудь другие функиции. Вот исходник проги:
#include <stdio.h>
#include <stdlib.h>

int main()
{
int razmer, i, j, k, z, u, g, y, t, e;
FILE *myFile;
//fpos_t filepos;
printf("Vvedite razmer fajla v bajtakh:\n");
t=0;
scanf("%d", &razmer);
if ((razmer%4)!=0) {
y=razmer/4;
razmer=(y+1)*4;
}
j=razmer/4;
if ((myFile=fopen("blin.dat", "wb")) == NULL) {
printf("not be open\n");
}
else {
for ( i=1; i<=j; i++ ) {
k=rand()%300;
fwrite(&k, sizeof(int),1, myFile);
t=t+1;
if (t>=(j/100)) {
printf(".");
t=0;
}
}
fclose (myFile);
}



printf(" \n");
printf("Dlja raspechatki chisel nazhmite 1\n");
scanf("%d", &g);
if (g=1){
if((myFile=fopen("blin.dat", "rb")) == NULL) {
printf("not be open\n");
}
else {
for ( i=1; i<=j; i++) {
fread(&z, sizeof(int),1, myFile);
printf("%d ", z);
}
fclose (myFile);
}
}

scanf("%d", &u);
return 0;
}

Очень нужна ваша помощь, сроки горят((
Я даже незнаю с чего начать:) Вопрос по си шарпу а код на с++, так на каком тебе языке доступ к файлу получать нужно?
...
Рейтинг: 0 / 0
20.11.2007, 20:39:30
    #34953485
bigbanka
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Вопрос по произвольному доступу к двоичному файлу в С#
Ты так не шути, у меня две книги)), и там огромными буквами написано что С)), короче на том коде, на котором исходник моей проги))
...
Рейтинг: 0 / 0
20.11.2007, 21:08:09
    #34953514
Tshamіl
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Вопрос по произвольному доступу к двоичному файлу в С#
bigbankaТы так не шути, у меня две книги)), и там огромными буквами написано что С)), короче на том коде, на котором исходник моей проги))
Ну так а что конкретно не получается? Применить fgetpos() и fsetpos()?
...
Рейтинг: 0 / 0
20.11.2007, 21:10:15
    #34953518
bigbanka
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Вопрос по произвольному доступу к двоичному файлу в С#
Да, не понимаю как их применить.
...
Рейтинг: 0 / 0
20.11.2007, 21:12:55
    #34953521
bigbanka
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Вопрос по произвольному доступу к двоичному файлу в С#
с fseek() все понятно, указал имя файла, указал сколько байт, указал от куда смещаться, с fgetpos fsetpos(), не могу разобраться((
...
Рейтинг: 0 / 0
20.11.2007, 23:15:52
    #34953620
Tshamіl
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Вопрос по произвольному доступу к двоичному файлу в С#
Чтобы много не писать приведу сразу пример из мсдн, думаю с помощью него ты разберешься с этими методами:
Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
20.
21.
22.
23.
24.
25.
26.
27.
28.
29.
30.
31.
32.
33.
34.
35.
36.
37.
38.
/* FGETPOS.C: This program opens a file and reads
 * bytes at several different locations.
 *
 * Place this code in a file called FGETPOS.C and then 
 * put the file in your project directory.
 */

#include <stdio.h>

void main( void )
{
   FILE   *stream;
   fpos_t pos;
   char   buffer[ 20 ];

   if( (stream = fopen( "fgetpos.c", "rb" )) == NULL )
      printf( "Trouble opening file\n" );
   else
   {
      /* Read some data and then check the position. */
      fread( buffer, sizeof( char ),  10 , stream );
      if( fgetpos( stream, &pos ) !=  0  )
         printf( "fgetpos error" );
      else
      {
         fread( buffer, sizeof( char ),  10 , stream );
         printf( "10 bytes at byte %I64d: %.10s\n", pos, buffer );
      }

   /* Set a new position and read more data */
   pos =  140 ;
   if( fsetpos( stream, &pos ) !=  0  )
      printf( "fsetpos error" );

   fread( buffer, sizeof( char ),  10 , stream );
   printf( "10 bytes at byte %I64d: %.10s\n", pos, buffer );
   fclose( stream );
   }
}
...
Рейтинг: 0 / 0
22.11.2007, 12:06:35
    #34957747
bigbanka
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Вопрос по произвольному доступу к двоичному файлу в С#
Слушай, можешь показать как это будет выглядеть применительно к моему коду, я уже голову всю поломал((. Относительно примера я чет тоже не понял, что там вообще происходит? сначало получают с помощью fgetpos 10, потом тупо меняю на 140, и что происходит? Короче полный Ахтунг((. Пойду утоплюсь нафиг))
...
Рейтинг: 0 / 0
22.11.2007, 12:58:43
    #34957987
maXmo
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Вопрос по произвольному доступу к двоичному файлу в С#
bigbankaпотом тупо меняю на 140, и что происходит?очевидно, pos присваивается занчение 140.
...
Рейтинг: 0 / 0
22.11.2007, 13:14:03
    #34958045
bigbanka
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Вопрос по произвольному доступу к двоичному файлу в С#
Ну это всем ясно что при pos=140, pos присваивается 140))))
...
Рейтинг: 0 / 0
Форумы / C++ [игнор отключен] [закрыт для гостей] / Вопрос по произвольному доступу к двоичному файлу в С# / 10 сообщений из 10, страница 1 из 1
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


Просмотр
0 / 0
Close
Debug Console [Select Text]