VC++ 文件操作


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

删除某行,需要重新写一次文件。也就是全部读取出来,处理,再重新写入。

你可能感兴趣的:(VC++ 文件操作)