ファイル内の1行のデータを削除する方法

2666 ワード

最近削除ファイルの1行のデータを書きます.mtkで書いたので、1行のデータを読み取る関数が見つからないようです.自分で一つ書きました.
// 
//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; }