ファイル内の1行のデータを削除する方法
最近削除ファイルの1行のデータを書きます.mtkで書いたので、1行のデータを読み取る関数が見つからないようです.自分で一つ書きました.
次に、1行のファイルを削除する関数を実装します.コードは他の特殊な場合に使用されるので、変数名が変になります.必要に応じて自分で変更してください.
基本的な原理は、Aから1行のデータを読み出して比較し、等しくなければBファイルに書き、見つけたらスキップし、ファイルを閉じて名前を変更することです.
//
//buffer \r
int fs_readline(int f,char *buffer)
{
int pos = 0;
UINT nResult = 0;
char temp[2]={0};
while(1)
{
FILE_READ(f,temp,1,&nResult);
if(nResult==1)
{
pos++;
if(temp[0]=='
')
{
break;
}
else if(temp[0]=='\r')
{
continue;
}else
{
buffer[pos]=temp[0];
}
}else
{
break;
}
}
return pos;
}
次に、1行のファイルを削除する関数を実装します.コードは他の特殊な場合に使用されるので、変数名が変になります.必要に応じて自分で変更してください.
基本的な原理は、Aから1行のデータを読み出して比較し、等しくなければBファイルに書き、見つけたらスキップし、ファイルを閉じて名前を変更することです.
//pSerial
//
int Del_OneLine(char *pSerial)
{
int f,f_tmp;
char temp[50]={0};
int pos = 0;
int count = 0;
f = FILE_OPEN(FAIL_RECORD, FS_READ_WRITE);
f_tmp = FILE_OPEN(TMP_RECORD, FS_READ_WRITE);
if (f ==FS_FILE_NOT_FOUND)
{
f = FILE_OPEN(FAIL_RECORD, FS_CREATE | FS_READ_WRITE);
if(f < FS_NO_ERROR)
return FALSE;
}
if (f_tmp ==FS_FILE_NOT_FOUND)
{
f_tmp = FILE_OPEN(TMP_RECORD, FS_CREATE | FS_READ_WRITE);
if(f_tmp < FS_NO_ERROR)
return FALSE;
}
do{
char str[50]={0};
UINT ilen = 0;
pos = fs_readline(f,str);
if(pos>0)
{
if(strcmp(pSerial,str)==0)
{
break;
}
sprintf(temp,"%s\r
",str);
if(FILE_WRITE(f_tmp, &temp,pos, (UINT *)&ilen) != FS_NO_ERROR)
{
FILE_CLOSE(f_tmp);
return FALSE;
}
}
}while(pos>0);
while( FILE_READ(f,temp,sizeof(temp),&nResult)==FS_NO_ERROR){
if(FILE_WRITE(f_tmp, &temp, nResult, (UINT *)&ilen) != FS_NO_ERROR)
{
FILE_CLOSE(f_tmp);
return FALSE;
}
}
FILE_CLOSE(f);
FILE_CLOSE(f_tmp);
FS_Delete(FAIL_RECORD);
FS_Rename( TMP_RECORD,FAIL_RECORD);
return count;
}