Невозможно прочитать данные из файла в двоичном режиме, язык C - PullRequest
0 голосов
/ 23 июня 2011

У меня проблема при попытке открыть файл для чтения в двоичном режиме.

Код такой:

PT_LONG LoadDataFromFile1(const char *pFileName,
                          unsigned char **ppBufer, PT_LONG *pLenData )
{
    PT_LONG retVal = 0;
    PT_DWORD fileLength = 0,len,i;
    unsigned char *buff,fn[35];
    unsigned char buff1[500];
    FILE *fil = NULL;

    fil = fopen(pFileName, "rb" );
    if ( fil != NULL )
    {
        fseek( fil, 0, SEEK_END );
        fileLength = ftell( fil );

        if ( fileLength > 0 )
        {
            *ppBufer = (unsigned char *) malloc( fileLength );
            *pLenData = (PT_DWORD) fileLength;
            printf("\n\n test file length:%d\n\n",fileLength);
            fseek( fil, 0, SEEK_SET );
            fread( *ppBufer, 1, fileLength, fil );                         
        }
        else
        {  
            retVal = -2;
        }
        fclose( fil );
    }
    else
    {  
        retVal = -1;
    }
    return retVal;
}

Здесь

если pFileName=/mnt/jffs2/bir/1234.bir работает нормально. Но если pfilename=/mnt/jffs2/bir/11772213A7894568.bir Я не могу прочитать данные из файла. Возвращает -1.

Ответы [ 2 ]

0 голосов
/ 23 июня 2011

Как вы получаете имена файлов?

Я подозреваю, что к одному из них прикреплен завершающий перевод строки, и вы действительно пытаетесь открыть ".../something.bir\n" вместо ".../something.bir"

Я предлагаюнаписать функцию trim (или две: ltrim и rtrim) и обработать имя файла перед его открытием.

0 голосов
/ 23 июня 2011

Если один файл работает, а другой возвращается с -1 (Файл не может быть открыт в вашем случае), это 99% проблема с вашим путем к файлу :-) Пожалуйста, дважды проверьте путь к файлу.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...