我是靠谱客的博主 称心柚子,最近开发中收集的这篇文章主要介绍Sqlite源码解读(十三),觉得挺不错的,现在分享给大家,希望可以做个参考。

概述

2021SC@SDUSC

接着上次继续看文件操作。

删除命名文件

static int winDelete(

  sqlite3_vfs *pVfs,          /*未用于win32 */

  const char *zFilename,      /* 要删除的文件名*/

  int syncDir                 /* 未用于 win32 */

){

  int cnt = 0;

  int rc;

  DWORD attr;

  DWORD lastErrno = 0;

  void *zConverted;

  UNUSED_PARAMETER(pVfs);

  UNUSED_PARAMETER(syncDir);

  SimulateIOError(return SQLITE_IOERR_DELETE);

  OSTRACE(("DELETE name=%s, syncDir=%dn", zFilename, syncDir));

  zConverted = winConvertFromUtf8Filename(zFilename);

  if( zConverted==0 ){

    OSTRACE(("DELETE name=%s, rc=SQLITE_IOERR_NOMEMn", zFilename));

    return SQLITE_IOERR_NOMEM_BKPT;

  }

  if( osIsNT() ){

    do {

#if SQLITE_OS_WINRT

      WIN32_FILE_ATTRIBUTE_DATA sAttrData;

      memset(&sAttrData, 0, sizeof(sAttrData));

      if ( osGetFileAttributesExW(zConverted, GetFileExInfoStandard,

                                  &sAttrData) ){

        attr = sAttrData.dwFileAttributes;

      }else{

        lastErrno = osGetLastError();

        if( lastErrno==ERROR_FILE_NOT_FOUND

         || lastErrno==ERROR_PATH_NOT_FOUND ){

          rc = SQLITE_IOERR_DELETE_NOENT;

        }else{

          rc = SQLITE_ERROR;

        }

        break;

      }

#else

      attr = osGetFileAttributesW(zConverted);

#endif

      if ( attr==INVALID_FILE_ATTRIBUTES ){

        lastErrno = osGetLastError();

        if( lastErrno==ERROR_FILE_NOT_FOUND

         || lastErrno==ERROR_PATH_NOT_FOUND ){

          rc = SQLITE_IOERR_DELETE_NOENT;

        }else{

          rc = SQLITE_ERROR;

        }

        break;

      }

      if ( attr&FILE_ATTRIBUTE_DIRECTORY ){

        rc = SQLITE_ERROR;   /*只提供文件*/

        break;

      }

      if ( osDeleteFileW(zConverted) ){

        rc = SQLITE_OK;   /* 删除完成*/

最后

以上就是称心柚子为你收集整理的Sqlite源码解读(十三)的全部内容,希望文章能够帮你解决Sqlite源码解读(十三)所遇到的程序开发问题。

如果觉得靠谱客网站的内容还不错,欢迎将靠谱客网站推荐给程序员好友。

本图文内容来源于网友提供,作为学习参考使用,或来自网络收集整理,版权属于原作者所有。
点赞(60)

评论列表共有 0 条评论

立即
投稿
返回
顶部