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

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

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值