diff --git a/frameworks/js/napi/file_access_module/file_info/napi_file_iterator_exporter.cpp b/frameworks/js/napi/file_access_module/file_info/napi_file_iterator_exporter.cpp index 935f828e5975fad985389c683c8f3413f9b50513..e1bece10e12ce8ee2eab87a679d53f7ccc7c1d98 100644 --- a/frameworks/js/napi/file_access_module/file_info/napi_file_iterator_exporter.cpp +++ b/frameworks/js/napi/file_access_module/file_info/napi_file_iterator_exporter.cpp @@ -76,7 +76,17 @@ static int MakeResult(napi_value &objFileInfoExporter, FileIteratorEntity *fileI FileInfoEntity *fileInfoEntity, napi_env env, NVal &nVal) { std::lock_guard lock(fileIteratorEntity->entityOperateMutex); - if (fileIteratorEntity->fileInfoVec.size() == 0) { + if (fileIteratorEntity->fileInfoVec.empty()) { + fileIteratorEntity->offset = 0; + fileIteratorEntity->pos = 0; + fileInfoEntity = nullptr;//没有可用的文件信息 + objFileInfoExporter = NVal::CreateUndefined(env).val_;//没有可导出的文件信息 + nVal.AddProp("value", objFileInfoExporter); + nVal.AddProp("done", NVal::CreateBool(env, true).val_); + return ERR_OK; + } + + if (fileIteratorEntity->pos == fileIteratorEntity->fileInfoVec.size()) { fileIteratorEntity->fileInfoVec.clear(); fileIteratorEntity->offset = 0; fileIteratorEntity->pos = 0; @@ -87,7 +97,7 @@ static int MakeResult(napi_value &objFileInfoExporter, FileIteratorEntity *fileI return ERR_OK; } - if (fileIteratorEntity->pos == MAX_COUNT) { + if (fileIteratorEntity->pos == MAX_COUNT || fileIteratorEntity->pos == 0) { fileIteratorEntity->fileInfoVec.clear(); fileIteratorEntity->offset += MAX_COUNT; fileIteratorEntity->pos = 0; @@ -108,20 +118,9 @@ static int MakeResult(napi_value &objFileInfoExporter, FileIteratorEntity *fileI } } - if (fileIteratorEntity->pos == fileIteratorEntity->fileInfoVec.size()) { - fileIteratorEntity->fileInfoVec.clear(); - fileIteratorEntity->offset = 0; - fileIteratorEntity->pos = 0; - fileInfoEntity = nullptr; - objFileInfoExporter = NVal::CreateUndefined(env).val_; - nVal.AddProp("value", objFileInfoExporter); - nVal.AddProp("done", NVal::CreateBool(env, true).val_); - return ERR_OK; - } fileInfoEntity->fileAccessHelper = fileIteratorEntity->fileAccessHelper; - fileInfoEntity->fileInfo = fileIteratorEntity->fileInfoVec[fileIteratorEntity->pos]; - fileIteratorEntity->pos++; + fileInfoEntity->fileInfo = fileIteratorEntity->fileInfoVec[fileIteratorEntity->pos++]; nVal.AddProp("value", objFileInfoExporter); nVal.AddProp("done", NVal::CreateBool(env, false).val_); return ERR_OK; diff --git a/interfaces/inner_api/file_access/src/file_access_ext_stub.cpp b/interfaces/inner_api/file_access/src/file_access_ext_stub.cpp index 22988fbd23b49e002f8dbe796bd3fb6d2c4fee59..26d339bf00ffb3523e241d7251d6f0b874735a04 100644 --- a/interfaces/inner_api/file_access/src/file_access_ext_stub.cpp +++ b/interfaces/inner_api/file_access/src/file_access_ext_stub.cpp @@ -401,15 +401,16 @@ ErrCode FileAccessExtStub::CmdListFile(MessageParcel &data, MessageParcel &reply std::vector fileInfoVec; int ret = ListFile(*fileInfo, offset, maxCount, *filter, fileInfoVec); + size_t actualCount = fileInfoVec.size();//获取实际文件数量 if (!reply.WriteInt32(ret)) { HILOG_ERROR("Parameter ListFile fail to WriteInt32 ret"); FinishTrace(HITRACE_TAG_FILEMANAGEMENT); return E_IPCS; } - - int64_t count {fileInfoVec.size()}; - if (!reply.WriteInt64(count)) { - HILOG_ERROR("Parameter ListFile fail to WriteInt64 count"); + size_t countPosition = reply.GetWritePosition(); // 获取 count 的位置 + reply.RewindWrite(countPosition); // 回到 count 的位置 + if (!reply.WriteInt64(actualCount)) { // 写入实际文件数量 + HILOG_ERROR("Parameter ListFile fail to WriteInt64 actualCount"); FinishTrace(HITRACE_TAG_FILEMANAGEMENT); return E_IPCS; } @@ -426,6 +427,7 @@ ErrCode FileAccessExtStub::CmdListFile(MessageParcel &data, MessageParcel &reply return ERR_OK; } + ErrCode FileAccessExtStub::CmdScanFile(MessageParcel &data, MessageParcel &reply) { StartTrace(HITRACE_TAG_FILEMANAGEMENT, "CmdScanFile");