2017-06-23 1 views
1

Vous vous demandez comment lire un fichier binaire dans Cython et renvoyer une chaîne à Python. J'ai ce qui suit, mais je reçois une erreur sur la ligne fread (buffer ..). Je ne suis pas super familier avec le C/Cython donc s'il est plus facile des fonctions intégrées pour lire les fichiers binaires dans des chaînes qui seraient AppréciéCython lit le fichier binaire dans une chaîne et renvoie

def read_file2(filename): 
cdef FILE * cfile 
cdef long length 
filename_byte_string = filename.encode("UTF-8") 
cdef char* fname = filename_byte_string 
cdef char * buffer; 

cfile = fopen(fname, "rb") 
if cfile: 
    fseek (cfile, 0, SEEK_END) 
    length = ftell(cfile) 
    fseek (cfile, 0, SEEK_SET) 
    buffer = <char*>malloc(length) 
    if buffer: 
     fread(&buffer, 1, length, fname) 

SOLVED: Je reçois l'erreur suivante:

read_numpy.pyx:64:33: Cannot assign type 'char *' to 'FILE *' 

Comment renvoyez-vous l'objet de tampon, ou la chaîne contenant la représentation d'octet du dossier à Python?

Répondre

1

Vous avez tort utilisé fname plutôt que cfile:

cfile = fopen(fname, "rb") 
if cfile: 
    fseek (cfile, 0, SEEK_END) 
    length = ftell(cfile) 
    fseek (cfile, 0, SEEK_SET) 
    buffer = <char*>malloc(length) 
    if buffer: 
     fread(&buffer, 1, length, fname) <--- 

Cette dernière ligne devrait être:

fread(&buffer, 1, length, cfile)