任何菜鸟问题,为了不给论坛添乱。专业人士,不要路过。没有你就无处可去 - 6. - 页 1119

 
Top2n:
结果,我除以8000,这样,数组的值就适合它们的索引了

你告诉我...

文件大小

返回以字节为单位的 文件大小。

类型

字节大小

正的最小值

最大值

C++中的模拟

浮动

4

1.175494351e-38

3.402823466e+38

浮动

8

2.2250738585072014e-308

1.7976931348623158e+308


文件的大小,以字节为单位,类型双倍 的大小,需要除以zhzhezhezhezhezhezhezhez。



 
Alexey Viktorov:

你告诉我...

类型

字节大小

最小正值

最大值

C++中的模拟

浮动

4

1.175494351e-38

3.402823466e+38

浮动

8

2.2250738585072014e-308

1.7976931348623158e+308


文件的大小,以字节为单位,类型双倍 的大小,必须除以zhzhezhezhezhezhezhezhezhezhezhezhezhezhez的字节。



什么是zzzzzzzz?这不可能,伙计,你就不能让它变得简单点吗?
 
Top2n:
什么是zzzzzzzz?这不可能,你就不能悠着点吗?
请你稍稍动动脑子。我只能给你建议,不能替你做。你的数据是什么,数组的尺寸 是多少...我不想记住这一切,并带领你走向胜利。
 

Получается, что если массив динамический, то формула /16, не совсем подходит, хотя второе же измерение фиксировано, к там уже -  

Выходит, что вторичный массив записывается на первичный, возможно перед записью что то сделать нужно
FileSeek(handle,0,SEEK_END);
Люди записывают переменные в массив, возможно поможет? типо такого

int dataArraySize = ArraySize(dataArray); //записываем в переменную размер массива
int fileHandle = FileOpen("filename.dat"FILE_BIN | FILE_WRITE); // открываем файл на запись в бинарном режиме.
FileWriteInteger(fileHandle, dataArraySize);//записываем в файл размер массива
FileWriteDouble(fileHandle, dataArraySize);//записываем в файл все элементы массива

 


在bin文件中补充新条 的行的代码

if(count==size)
        {
      //  ArrayResize(arrS,coun);  
         for(int q=0; q<ARRAY_SIZE_X; q++) // Перебор по периоду, колонка X
           {
            arrS[q]=sm.d[q].m[rates_total-1];                // M(I) SMA
            coun++; 
           }
         ResetLastError();
         int handle=FileOpen(path,FILE_WRITE|FILE_BIN);
         if(handle!=INVALID_HANDLE)
           {
            //--- запишем данные массива в конец файла
            FileSeek(handle,0,SEEK_SET);
            FileWriteArray(handle,arrS);
            Print("arrS = ",arrS[0]," arrS = ",arrS[1]," arrS = ",arrS[3]);
            //--- закрываем файл
            FileClose(handle);
           }
         else
            Print("Failed to open the file, error ",GetLastError());
         count=1;
        }
 
Top2n:

Получается, что если массив динамический, то формула /16, не совсем подходит, хотя второе же измерение фиксировано, к там уже -  

Выходит, что вторичный массив записывается на первичный, возможно перед записью что то сделать нужно
FileSeek(handle,0,SEEK_END);
Люди записывают переменные в массив, возможно поможет? типо такого

int dataArraySize = ArraySize(dataArray); //записываем в переменную размер массива
int fileHandle = FileOpen("filename.dat"FILE_BIN | FILE_WRITE); // открываем файл на запись в бинарном режиме.
FileWriteInteger(fileHandle, dataArraySize);//записываем в файл размер массива
FileWriteDouble(fileHandle, dataArraySize);//записываем в файл все элементы массива

 


在bin文件中补充一个新条 目的行的代码

if(count==size)
        {
      //  ArrayResize(arrS,coun);  
         for(int q=0; q<ARRAY_SIZE_X; q++) // Перебор по периоду, колонка X
           {
            arrS[q]=sm.d[q].m[rates_total-1];                // M(I) SMA
            coun++; 
           }
         ResetLastError();
         int handle=FileOpen(path,FILE_WRITE|FILE_BIN);
         if(handle!=INVALID_HANDLE)
           {
            //--- запишем данные массива в конец файла
            FileSeek(handle,0,SEEK_SET);
            FileWriteArray(handle,arrS);
            Print("arrS = ",arrS[0]," arrS = ",arrS[1]," arrS = ",arrS[3]);
            //--- закрываем файл
            FileClose(handle);
           }
         else
            Print("Failed to open the file, error ",GetLastError());
         count=1;
        }


我不记得我在哪里读到的,但如果你打开一个只用于写作的文件,其中的所有内容都会被删除。

int handle=FileOpen(path,FILE_WRITE|FILE_BIN);

该文件必须被打开以进行读写

int handle = FileOpen(path, FILE_READ|FILE_WRITE|FILE_BIN);
如果我们打开的文件 只用于阅读,那么可以甚至最好不要指定写入标志。
 
Alexey Viktorov:

我不记得我在哪里读到的,但如果一个文件只被打开写,里面的东西就会被删除。

int handle=FileOpen(path,FILE_WRITE|FILE_BIN);

该文件必须被打开以进行读写

int handle = FileOpen(path, FILE_READ|FILE_WRITE|FILE_BIN);
如果我们打开的文件 只用于阅读,那么可以甚至最好不要指定写入标志。
请原谅我,但我已经解决了))问题也是这些之一))。By poking around))))
 

我以为就这样了。

我把新的数据写到开头,它写到了完整的开头,有什么办法可以增加开头的大小吗))

我的意思是,它只限于写到开头吗?还是只继续保存到最后?

FileSeek(handle,0,SEEK_SET);

如果我保存到最后,并继续添加到最后,我如何从最后读到正确的数量?或者说,如何从bin文件中抓取从N到结束的正确块?

还是我用了错误的命令!!?

我把两个数组保存到最后--正如我所理解的那样,通过增加垃圾桶的重量正确地保存。

然后我尝试将数据传输到数组,任务是捕获最后一条记录,文件仓比数组大。

  ResetLastError();
   int file_handle=FileOpen(path,FILE_READ|FILE_BIN);
   if(file_handle!=INVALID_HANDLE)
     {
      //--- прочитаем все данные из файла в массив
      //file_siz=FileSize(file_handle)/8000;
      //FileSeek(file_handle,file_size,SEEK_END);
      FileReadArray(file_handle,arr);
      //--- получим размер массива
      int siz=ArraySize(arr);
      //--- распечатаем данные из массива
      Print("arr = ",arr[1][3]," Bid = ",arr[1][2]," Ask = ",arr[0][3]);
      Print("file_siza = ",file_siz);
      //--- закрываем файл
      FileClose(file_handle);
FileSeek(file_handle,file_size,SEEK_SET);  что делает  - определяет положение массива или в бине?
 

如果我从二进制文件中读取所需的部分,用

FileReadArray(file_handle,arr,0,WHOLE_ARRAY);

该算法对数组本身进行处理,缺失的单元被翻译成类似于bin中的位置,这反过来又给出了与bin中相同位置的限制中的要求范围,只是有零。

 
Top2n:

如果我从二进制文件中读取所需的部分,用

FileReadArray(file_handle,arr,0,WHOLE_ARRAY);

该算法处理数组本身,缺失的单元被翻译成类似于二进制的位置,这反过来又给出了在二进制中相同位置的限制中所要求的范围,只是有零。

我不明白什么会出错......

只是打开文件 进行阅读。

handle = FileOpen(path, FILE_READ|FILE_BIN);

将指针移到正确方向的正确字节数上

FileSeek(handle, -32, SEEK_END);
// В данном случае от конца файла на 32 байта

32字节是8个整数值或4个浮点值。

如果数组是二维的,这意味着如果数组是int类型的,我们移4行,如果数组是double类型的,移2行。

然后,我们将这些值读入事先声明的动态arr[][2]数组中;这是一个二维数组。

FileReadArray(handle, arr);

就是这样!!!。

接下来,确定阵列的大小

int size = ArrayRange(arr, 0);

然后打印这些值。

int i, z;

for(i = 0; i < size; i++)

  {
   for(z = 0; z < 2; z++)
    {
     Print("arr[", i, "][", z, "]", arr[i][z]);
    }
  }
 
Alexey Viktorov:

我不明白什么会出错......

谢谢你,你!它成功了))))。