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..70f5b5374c7da4ccf26e2bad8aff44823814ccc8 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 @@ -12,7 +12,7 @@ * See the License for the specific language governing permissions and * limitations under the License. */ - + #include "napi_file_iterator_exporter.h" #include @@ -77,20 +77,32 @@ static int MakeResult(napi_value &objFileInfoExporter, FileIteratorEntity *fileI { std::lock_guard lock(fileIteratorEntity->entityOperateMutex); if (fileIteratorEntity->fileInfoVec.size() == 0) { - fileIteratorEntity->fileInfoVec.clear(); + 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,10 +98,11 @@ 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; + int ret = ERR_OK; if (fileIteratorEntity->flag == 0) { int ret = fileIteratorEntity->fileAccessHelper->ListFile(fileIteratorEntity->fileInfo, fileIteratorEntity->offset, MAX_COUNT, fileIteratorEntity->filter, fileIteratorEntity->fileInfoVec); @@ -122,6 +134,7 @@ static int MakeResult(napi_value &objFileInfoExporter, FileIteratorEntity *fileI 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..260f1fab01f8fd7383b326a0c079cb51d91ca765 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,21 @@ 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"); + + // 获取 count 的位置 + size_t countPosition = reply.GetWritePosition(); + // 回到 count 的位置 + reply.RewindWrite(countPosition); + // 写入实际文件数量 + if (!reply.WriteInt64(actualCount)) { + HILOG_ERROR("Parameter ListFile fail to WriteInt64 actualCount"); FinishTrace(HITRACE_TAG_FILEMANAGEMENT); return E_IPCS; } @@ -421,7 +427,6 @@ ErrCode FileAccessExtStub::CmdListFile(MessageParcel &data, MessageParcel &reply return E_IPCS; } } - FinishTrace(HITRACE_TAG_FILEMANAGEMENT); return ERR_OK; }