⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 file.c

📁 一个很好用的解析
💻 C
字号:
/********************************************************************************** file.c**** This file is part of the ABYSS Web server project.**** Copyright (C) 2000 by Moez Mahfoudh <mmoez@bigfoot.com>.** All rights reserved.**** Redistribution and use in source and binary forms, with or without** modification, are permitted provided that the following conditions** are met:** 1. Redistributions of source code must retain the above copyright**    notice, this list of conditions and the following disclaimer.** 2. Redistributions in binary form must reproduce the above copyright**    notice, this list of conditions and the following disclaimer in the**    documentation and/or other materials provided with the distribution.** 3. The name of the author may not be used to endorse or promote products**    derived from this software without specific prior written permission.** ** THIS SOFTWARE IS PROVIDED BY THE AUTHOR AND CONTRIBUTORS ``AS IS'' AND** ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE** IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE** ARE DISCLAIMED.  IN NO EVENT SHALL THE AUTHOR OR CONTRIBUTORS BE LIABLE** FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL** DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS** OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)** HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT** LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY** OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF** SUCH DAMAGE.********************************************************************************/#include <string.h>#ifdef WIN32#include <io.h>#endif#ifndef WIN32#include <dirent.h>#include <sys/stat.h>#endif#include "xmlrpc-c/abyss.h"#include "file.h"/*********************************************************************** File*********************************************************************/abyss_bool FileOpen(TFile *f, const char *name,uint32_t attrib){#if defined( WIN32 ) && !defined( __BORLANDC__ )    return ((*f=_open(name,attrib))!=(-1));#else    return ((*f=open(name,attrib))!=(-1));#endif}abyss_bool FileOpenCreate(TFile *f, const char *name, uint32_t attrib){#if defined( WIN32 ) && !defined( __BORLANDC__ )    return ((*f=_open(name,attrib | O_CREAT,_S_IWRITE | _S_IREAD))!=(-1));#else    return ((*f=open(name,attrib | O_CREAT,S_IWRITE | S_IREAD))!=(-1));#endif}abyss_boolFileWrite(TFile *      const f,          const void * const buffer,          uint32_t     const len) {#if defined( WIN32 ) && !defined( __BORLANDC__ )    return (_write(*f,buffer,len)==(int32_t)len);#else    return (write(*f,buffer,len)==(int32_t)len);#endif}int32_t FileRead(TFile *f, void *buffer, uint32_t len){#if defined( WIN32 ) && !defined( __BORLANDC__ )    return (_read(*f,buffer,len));#else    return (read(*f,buffer,len));#endif}abyss_bool FileSeek(TFile *f, uint64_t pos, uint32_t attrib){#if defined( WIN32 ) && !defined( __BORLANDC__ )    return (_lseek(*f,pos,attrib)!=(-1));#else    return (lseek(*f,pos,attrib)!=(-1));#endif}uint64_t FileSize(TFile *f){#if defined( WIN32 ) && !defined( __BORLANDC__ )    return (_filelength(*f));#else    struct stat fs;    fstat(*f,&fs);    return (fs.st_size);#endif  }abyss_bool FileClose(TFile *f){#if defined( WIN32 ) && !defined( __BORLANDC__ )    return (_close(*f)!=(-1));#else    return (close(*f)!=(-1));#endif}abyss_boolFileStat(const char * const filename,         TFileStat *  const filestat) {#if defined( WIN32 ) && !defined( __BORLANDC__ )    return (_stati64(filename,filestat)!=(-1));#else    return (stat(filename,filestat)!=(-1));#endif}abyss_boolFileFindFirst(TFileFind *  const filefind,              const char * const path,              TFileInfo *  const fileinfo) {#ifdef WIN32    abyss_bool ret;    char *p=path+strlen(path);    *p='\\';    *(p+1)='*';    *(p+2)='\0';#ifndef __BORLANDC__    ret=(((*filefind)=_findfirst(path,fileinfo))!=(-1));#else    *filefind = FindFirstFile( path, &fileinfo->data );   ret = *filefind != NULL;   if( ret )   {      LARGE_INTEGER li;      li.LowPart = fileinfo->data.nFileSizeLow;      li.HighPart = fileinfo->data.nFileSizeHigh;      strcpy( fileinfo->name, fileinfo->data.cFileName );       fileinfo->attrib = fileinfo->data.dwFileAttributes;       fileinfo->size   = li.QuadPart;      fileinfo->time_write = fileinfo->data.ftLastWriteTime.dwLowDateTime;   }#endif    *p='\0';    return ret;#else  /* WIN32 */    strncpy(filefind->path,path,NAME_MAX);    filefind->path[NAME_MAX]='\0';    filefind->handle=opendir(path);    if (filefind->handle)        return FileFindNext(filefind,fileinfo);    return FALSE;#endif /* WIN32 */}abyss_bool FileFindNext(TFileFind *filefind,TFileInfo *fileinfo){#ifdef WIN32#ifndef __BORLANDC__    return (_findnext(*filefind,fileinfo)!=(-1));#else   abyss_bool ret = FindNextFile( *filefind, &fileinfo->data );   if( ret )   {      LARGE_INTEGER li;      li.LowPart = fileinfo->data.nFileSizeLow;      li.HighPart = fileinfo->data.nFileSizeHigh;      strcpy( fileinfo->name, fileinfo->data.cFileName );       fileinfo->attrib = fileinfo->data.dwFileAttributes;       fileinfo->size   = li.QuadPart;      fileinfo->time_write = fileinfo->data.ftLastWriteTime.dwLowDateTime;   }    return ret;#endif#else  /* WIN32 */    struct dirent *de;    /****** Must be changed ***/    char z[NAME_MAX+1];    de=readdir(filefind->handle);    if (de)    {        struct stat fs;        strcpy(fileinfo->name,de->d_name);        strcpy(z,filefind->path);        strncat(z,"/",NAME_MAX);        strncat(z,fileinfo->name,NAME_MAX);        z[NAME_MAX]='\0';                stat(z,&fs);        if (fs.st_mode & S_IFDIR)            fileinfo->attrib=A_SUBDIR;        else            fileinfo->attrib=0;        fileinfo->size=fs.st_size;        fileinfo->time_write=fs.st_mtime;                return TRUE;    };    return FALSE;#endif /* WIN32 */}void FileFindClose(TFileFind *filefind){#ifdef WIN32#ifndef __BORLANDC__    _findclose(*filefind);#else   FindClose( *filefind );#endif#else  /* WIN32 */    closedir(filefind->handle);#endif /* WIN32 */}

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -