Цитата(pokk @ Feb 20 2018, 09:52)
1) сколько места выделяется при открытии файла fat_fs?
брр, все время было равно sizeof( FIL )
Цитата(pokk @ Feb 20 2018, 09:52)
2) как правильно записывать несколько файлов ?(открыл файл 1 записал закрыл, открыл файл 2 записал закрыл,)
Открыл для чтения в FIL fil_r, а для записи в FIL fil_w
CODE
//------------------------------------------------------------------------------
FRESULT copy( const TCHAR* path_src, const TCHAR* path_dst, data_storage_file_copy_cb cb, UINT* bytes_written )
{
FRESULT ret = FR_INT_ERR;
FIL* fil_src = (FIL*)MALLOC( sizeof( FIL ) );
FIL* fil_dst = (FIL*)MALLOC( sizeof( FIL ) );
char* buff = (char*)MALLOC( 512 );
bool file_src_open = false;
bool file_dst_open = false;
FRESULT res_src;
FRESULT res_dst;
UINT cnt = 0, cnt_total = 0;
if( ( fil_src == NULL ) || ( fil_dst == NULL ) || ( buff == NULL ) )
{
ret = FR_INT_ERR;
goto copy_exit;
}
res_src = f_open( fil_src, path_src, FA_READ );
if( res_src != FR_OK )
{
ret = FR_NO_FILE;
goto copy_exit;
}
file_src_open = true;
res_dst = f_open( fil_dst, path_dst, FA_WRITE + FA_CREATE_ALWAYS );
if( res_dst != FR_OK )
{
ret = FR_NO_FILE;
goto copy_exit;
}
file_dst_open = true;
cnt_total = f_size( fil_src );
while( 1 )
{
UINT br, bw;
res_src = f_read( fil_src, buff, 512, &br ); // Read a chunk of source file
if( res_src != FR_OK )
{
ASSERT( 0 );
break;
}
if( br == 0 )
{
ret = FR_OK;
break; // error or eof
}
res_dst = f_write( fil_dst, buff, br, &bw ); // Write it to the destination file
cnt += bw;
if( cb )
cb( cnt, cnt_total );
if( ( res_dst != FR_OK ) || ( bw < br ) )
{
ASSERT( 0 );
break; // error or disk full
}
}
copy_exit:
if( file_src_open )
{
res_src = f_close( fil_src );
ASSERT( res_src == FR_OK );
}
if( file_dst_open )
{
res_dst = f_close( fil_dst );
ASSERT( res_dst == FR_OK );
}
if( buff ) FREE( buff );
if( fil_src ) FREE( fil_src );
if( fil_dst ) FREE( fil_dst );
if( bytes_written )
*bytes_written = cnt;
return ret;
}