locked
EXCEEDS 2GB LIMIT RRS feed

  • Pregunta

  • A reputable consulting the forum, I have an OS window7 ultimate x64, I have installed the x86 software (MT4).
    So far so good, but when I apply a function of MT4 software, throw me a message "Size of. Fxt file: 2GB EXCEEDS LIMIT"
    as I can correct this defect?.
    sábado, 7 de septiembre de 2013 6:00

Respuestas

  • Desgraciadamente todavía no me he enterado de lo que es el programa MT4 (algo relacionado con finanzas, aunque no he profundizado mucho más) ni de cómo está hecho, pero me da la sensación de que va dirigido a un público bastante reducido. ¿No sería más razonable consultar otros foros en los que se hable específicamente de esa aplicación, e incluso preguntar en ellos, que aquí? Además, ese trozo de código está pensado para incorporarlo en programas de Visual Basic 6 (disponiendo del código fuente y el entorno de desarrollo para compilarlo) o en secciones de código VBA como por ejemplo las macros de Word, Excel y demás.

    Si la única forma de sobrepasar la limitación de los 2 GB en los ficheros es pagar la actualización a una nueva versión, lo siento mucho pero aquí no se puede hacer nada.


    No puedo garantizar a priori que mis respuestas sean exactas y acordes a los problemas descritos, pero por lo menos yo no las voy marcando como propuestas o definitivas sin saber si han sido útiles o no. Tampoco vinculado a Microsoft.

    • Marcado como respuesta Uriel Almendra lunes, 9 de septiembre de 2013 15:50
    domingo, 8 de septiembre de 2013 15:29

Todas las respuestas

  • ¿Y no será una limitación propia de ese programa?

    No puedo garantizar a priori que mis respuestas sean exactas y acordes a los problemas descritos, pero por lo menos yo no las voy marcando como propuestas o definitivas sin saber si han sido útiles o no. Tampoco vinculado a Microsoft.

    sábado, 7 de septiembre de 2013 15:08
  • Tiene toda la pinta de que, como Ramón indica, es limitación del programa y no del sistema de archivos del Sistema.

    Saludos
    José Antonio Quílez
    Mi Blog

    sábado, 7 de septiembre de 2013 18:00
    Moderador
  • Si Ramon.

    Es una limitacion del programa y he visto  algunas "soluciones" de pago y gratuitos.

    Lineas Abajo veras un ejemplo de una posible solucion que te menciono (puedo mencionar otras mas)

    La verdad no lo entiendo al 100%

    , y si me podrias ayudar a implementarlo en mi SO para saltar dicha limitacion.

    -------------------------------------------------------------------------------------------------------------

    tomado de http://vb6-to-csharp.blogspot.com

    VB6 VBA Read Large Binary Flat Files Past 2GB

    Limitation Using Windows API ReadFile WriteFile

    If you deal with really large flat files in VB6 or VBA, how do you read past the 2 GB

    limitation? Visual Basic 6 / VBA has a very easy file read/write mechanism for binary

    files. It works great for user defined types (UDTs) and arrays of UDTs. Unfortunately, this

    interface was written before terabyte hard drives became standard. The actual limit is the

    size of a long integer (2,147,483,647). When reading using the binary Get function, I had

    the unpleasant experience of rolling the record number, which resulted in the value

    becoming negative, triggering a read error. I was fortunate to find a well-written demo

    that gives a solution using the Windows API file read / write methods to ReadFile and

    WriteFile. You can find the demo and more information at the link below:

    VB6 HugeFixedFile

    The code contains a class that encapsulates the basic methods you will need to deal

    with large files in VBA and VB6. See the code and forum posts for more details. I have

    since ditched the UDT interface as I found that LSet didn't do a great job converting my

    byte array to UDT. So I manually convert the byte arrays into the proper types. I had to

    find / build functions to convert a byte array to an integer and a long. The code is posted

    below in case some of you might find it useful to convert a byte array to an integer or a

    byte array to a long in VB6 or VBA:

    Code:

    Private Function ConvertByteToInteger(ByVal start As Long, ByVal lend As Long, ByRef byt

    () As Byte) As Integer

    ConvertByteToInteger = byt(start) + CLng(byt(lend)) * 256

    End Function

    Private Function ConvertByteToLong(ByVal start As Long, ByVal lend As Long, ByRef byt()

    As Byte) As Long

    ConvertByteToLong = byt(start) + CLng(byt(start + 1)) * 256& + CLng(byt(start + 2))

    * 2& ^ 16 + CLng(byt(lend)) * 2 ^ 32

    End Function

    I also ditched the UDTs though the code at the link above shows how to convert a byte

    array to UDT using LSet. I found that by using the HugeFixedFile class and loading a

    byte array of 1000 records of 16 byte records, my processing time was cut by almost 2/3

    when reading a large file. As a result, I edited the Read function (found in the demo) to

    allow for reading a larger byte array than the record count as follows: (assumes a zerobased

    byte array)

    Code:

    Public Function ReadRec(ByRef Record() As Byte) As Long

    If ReadFile(hFile, VarPtr(Record(0)), UBound(Record) + 1, ReadRec, 0) Then

    If ReadRec = 0 Then

    fEOF = True

    End If

    Else

    RaiseError HFF_READ_FAILURE

    End If

    End Function

    sábado, 7 de septiembre de 2013 23:03
  • Hola Jose:

    Te envio lo mismo que a ramon, una posible solucion a dicha limitacion,

    favor de ayudar de implementarlo a mi SO.

    --------------------------------------------------------------------

    tomado de http://vb6-to-csharp.blogspot.com

    VB6 VBA Read Large Binary Flat Files Past 2GB

    Limitation Using Windows API ReadFile WriteFile

    If you deal with really large flat files in VB6 or VBA, how do you read past the 2 GB

    limitation? Visual Basic 6 / VBA has a very easy file read/write mechanism for binary

    files. It works great for user defined types (UDTs) and arrays of UDTs. Unfortunately, this

    interface was written before terabyte hard drives became standard. The actual limit is the

    size of a long integer (2,147,483,647). When reading using the binary Get function, I had

    the unpleasant experience of rolling the record number, which resulted in the value

    becoming negative, triggering a read error. I was fortunate to find a well-written demo

    that gives a solution using the Windows API file read / write methods to ReadFile and

    WriteFile. You can find the demo and more information at the link below:

    VB6 HugeFixedFile

    The code contains a class that encapsulates the basic methods you will need to deal

    with large files in VBA and VB6. See the code and forum posts for more details. I have

    since ditched the UDT interface as I found that LSet didn't do a great job converting my

    byte array to UDT. So I manually convert the byte arrays into the proper types. I had to

    find / build functions to convert a byte array to an integer and a long. The code is posted

    below in case some of you might find it useful to convert a byte array to an integer or a

    byte array to a long in VB6 or VBA:

    Code:

    Private Function ConvertByteToInteger(ByVal start As Long, ByVal lend As Long, ByRef byt

    () As Byte) As Integer

    ConvertByteToInteger = byt(start) + CLng(byt(lend)) * 256

    End Function

    Private Function ConvertByteToLong(ByVal start As Long, ByVal lend As Long, ByRef byt()

    As Byte) As Long

    ConvertByteToLong = byt(start) + CLng(byt(start + 1)) * 256& + CLng(byt(start + 2))

    * 2& ^ 16 + CLng(byt(lend)) * 2 ^ 32

    End Function

    I also ditched the UDTs though the code at the link above shows how to convert a byte

    array to UDT using LSet. I found that by using the HugeFixedFile class and loading a

    byte array of 1000 records of 16 byte records, my processing time was cut by almost 2/3

    when reading a large file. As a result, I edited the Read function (found in the demo) to

    allow for reading a larger byte array than the record count as follows: (assumes a zerobased

    byte array)

    Code:

    Public Function ReadRec(ByRef Record() As Byte) As Long

    If ReadFile(hFile, VarPtr(Record(0)), UBound(Record) + 1, ReadRec, 0) Then

    If ReadRec = 0 Then

    fEOF = True

    End If

    Else

    RaiseError HFF_READ_FAILURE

    End If

    End Function

    sábado, 7 de septiembre de 2013 23:10
  • Desgraciadamente todavía no me he enterado de lo que es el programa MT4 (algo relacionado con finanzas, aunque no he profundizado mucho más) ni de cómo está hecho, pero me da la sensación de que va dirigido a un público bastante reducido. ¿No sería más razonable consultar otros foros en los que se hable específicamente de esa aplicación, e incluso preguntar en ellos, que aquí? Además, ese trozo de código está pensado para incorporarlo en programas de Visual Basic 6 (disponiendo del código fuente y el entorno de desarrollo para compilarlo) o en secciones de código VBA como por ejemplo las macros de Word, Excel y demás.

    Si la única forma de sobrepasar la limitación de los 2 GB en los ficheros es pagar la actualización a una nueva versión, lo siento mucho pero aquí no se puede hacer nada.


    No puedo garantizar a priori que mis respuestas sean exactas y acordes a los problemas descritos, pero por lo menos yo no las voy marcando como propuestas o definitivas sin saber si han sido útiles o no. Tampoco vinculado a Microsoft.

    • Marcado como respuesta Uriel Almendra lunes, 9 de septiembre de 2013 15:50
    domingo, 8 de septiembre de 2013 15:29
  • Hola Ramon:
    Si tienes razon cuando dices en consultar en aquellos foros especializados,
    y gran sorpresa me comento un forista (era estudiante de ing sistemas) que lo unico
    que habia cambiado fue en el registro de window y un par de ajustes gracias a sus
    conocimientos de informatica, ojo no dijo finanzas.
    En cuanto a comprar o no el parche, eso no es problema. pero te digo que a mi no
    me gusta comprar pescado sino aprender a pescar.
    Sobre el codigo te dije que no lo entiendo al 100%,
    Quizas me equivoque de foro, disculpas si el tema fue mucho.
    A menos que haya alguien que pueda compartir su experiencia si se topo con
    este tipo de problema.

    saludos.

    lunes, 9 de septiembre de 2013 2:37
  • Quizá haya algún otro miembro del foro dispuesto a echar una mano, pero por lo que a mí respecta eso está fuera de mi alcance, lo siento.

    No puedo garantizar a priori que mis respuestas sean exactas y acordes a los problemas descritos, pero por lo menos yo no las voy marcando como propuestas o definitivas sin saber si han sido útiles o no. Tampoco vinculado a Microsoft.

    lunes, 9 de septiembre de 2013 15:02