int ENV_Data_Num ( char * FileName )
{
FILE * fin ;
short int Rec_Num ;
if ( ( fin = fopen ( FileName , "rb" ) ) == NULL )
{
return -1 ;
}
Skip_Eof ( fin ) ;
fread ( &Rec_Num , sizeof ( short int ) , 1 , fin ) ;
fclose ( fin ) ;
return Rec_Num ;
}
//---------------------------------------------------------------------------
void Skip_Eof ( FILE * fin )
{
int c ;
c = 0 ;
while ( c != 26 )
{
c = fgetc ( fin ) ;
}
}
//---------------------------------------------------------------------------
int ENV_Data_Read ( char * FileName , void * pv , int Which_From )
{
FILE * fin ;
short int Rec_Num , Rec_Size ;
if ( ( fin = fopen ( FileName , "rb" ) ) == NULL )
{
return -1 ;
}
Skip_Eof ( fin ) ;
fread ( &Rec_Num , sizeof ( short int ) , 1 , fin ) ;
if ( Rec_Num <= Which_From )
{
fclose ( fin ) ;
return -1 ;
}
fread ( &Rec_Size , sizeof ( short int ) , 1 , fin ) ;
if ( fseek ( fin , Which_From * Rec_Size , SEEK_CUR ) != 0 ) return 1 ;
if ( fread ( pv , Rec_Size , 1 , fin ) != ( size_t )1 )
{
fclose ( fin ) ;
return -1 ;
}
fclose ( fin ) ;
return Rec_Num ;
}
//--------------------------------------------------------------------------
int ENV_Data_Write(char *FileName,void *pv,int size,int Where_To)
{
//适用于修改文件中的某条记录或向文件尾部添加一条新的纪录
FILE *fin;
bool first_access = false;
short int Rec_Num,Rec_Size;
if((fin = fopen(FileName,"rb+")) == NULL)
{
if((fin = fopen(FileName,"wb+")) != NULL)
{
first_access = true;
goto Lab;
}
return -1;
}
Lab:
if(first_access)
{
char c = 26;
Rec_Num = 1;
fputc(c,fin);
fwrite(&Rec_Num,sizeof(short int),1,fin);
Rec_Size = size;
fwrite(&Rec_Size,sizeof(short int),1,fin);
fseek(fin,0,SEEK_SET);
}
Skip_Eof (fin) ;
fread ( &Rec_Num , sizeof (short int) , 1 , fin ) ;
if ( Rec_Num <= Where_To )
{
Rec_Num = Where_To+1;
fseek(fin,-sizeof(short int),SEEK_CUR);
fwrite(&Rec_Num,sizeof(short int),1,fin);
fseek(fin,-sizeof(short int),SEEK_CUR);
fread(&Rec_Num,sizeof(short int),1,fin);
}
fread(&Rec_Size,sizeof(short int),1,fin);
if(fseek(fin,Where_To*Rec_Size,SEEK_CUR)!=0)
return -1;
if(fwrite(pv,Rec_Size,1,fin) != (size_t)1)
{
fclose(fin);
return -1;
}
fclose(fin);
return Rec_Num;
}
http://www.23book.net/SoftwareDev/VC/54908.htm
一行行的读 使用CStdioFile 删除其中任意一行,如何添加 需要重新写文件 |
lixiaosan(小三) 于 2005-8-15 9:24:43 |
CStdioFile::ReadString 删除的一行和添加一行 在全部读出文件内容,修改内容后再全部写回 |
younggle(洋溢) 于 2005-8-15 9:29:38 |
fopen fread fwrite fclose |
ShiGang(Sucess) 于 2005-8-15 9:30:45 |
用CFile的MFC類或直接用API 如: AreFileApisANSI CancelIo CopyFile CopyFileEx CopyProgressRoutine CreateDirectory CreateDirectoryEx CreateFile CreateIoCompletionPort DefineDosDevice DeleteFile FileIOCompletionRoutine FindClose FindCloseChangeNotification FindFirstChangeNotification FindFirstFile FindFirstFileEx FindNextChangeNotification FindNextFile FlushFileBuffers GetBinaryType GetCurrentDirectory GetDiskFreeSpace GetDiskFreeSpaceEx GetDriveType GetFileAttributes GetFileAttributesEx GetFileInformationByHandle GetFileSize GetFileType GetFullPathName GetLogicalDrives GetLogicalDriveStrings GetLongPathName GetQueuedCompletionStatus GetShortPathName GetTempFileName GetTempPath LockFile LockFileEx MoveFile MoveFileEx PostQueuedCompletionStatus QueryDosDevice ReadDirectoryChangesW ReadFile ReadFileEx ReadFileScatter ReadFileVlm RemoveDirectory SearchPath SetCurrentDirectory SetEndOfFile SetFileApisToANSI SetFileApisToOEM SetFileAttributes SetFilePointer SetVolumeLabel UnlockFile UnlockFileEx WriteFile WriteFileEx WriteFileGather WriteFileVlm |
10:09:03 |
用CStdioFile的ReadString和WriteString或用CFile的Read和Write,CFile的读取和写入是通过文件指针读写其中的内容,用"/n"分隔行。 |
-15 11:30:12 |
CStdioFile::ReadString和CStdioFile::WriteString 删除某行,需要重新写一次文件。也就是全部读取出来,处理,再重新写入。 |