diff --git a/src/dfm-io/dfm-io/denumerator.cpp b/src/dfm-io/dfm-io/denumerator.cpp index 97b70f88..3d3a000a 100644 --- a/src/dfm-io/dfm-io/denumerator.cpp +++ b/src/dfm-io/dfm-io/denumerator.cpp @@ -1,4 +1,4 @@ -// SPDX-FileCopyrightText: 2020 - 2023 UnionTech Software Technology Co., Ltd. +// SPDX-FileCopyrightText: 2020 - 2026 UnionTech Software Technology Co., Ltd. // // SPDX-License-Identifier: GPL-3.0-or-later @@ -644,12 +644,6 @@ bool DEnumerator::hasNext() const g_object_unref(nextInfo); - if (gerror) { - d->setErrorFromGError(gerror); - g_error_free(gerror); - gerror = nullptr; - } - if (!d->checkFilter()) return this->hasNext(); @@ -659,9 +653,20 @@ bool DEnumerator::hasNext() const // nextInfo == NULL: either finished or an error occurred if (gerror) { d->setErrorFromGError(gerror); + d->nextUrl = QUrl(); + d->dfileInfoNext.reset(); return true; } + // 枚举完成,关闭并释放当前枚举器,释放 fd + if (!d->stackEnumerator.isEmpty()) { + GFileEnumerator *enumerator = d->stackEnumerator.pop(); + if (enumerator) { + g_file_enumerator_close(enumerator, nullptr, nullptr); + g_object_unref(enumerator); + } + } + return false; } diff --git a/src/dfm-io/dfm-io/private/denumerator_p.h b/src/dfm-io/dfm-io/private/denumerator_p.h index 9e032c53..c5c1c1ff 100644 --- a/src/dfm-io/dfm-io/private/denumerator_p.h +++ b/src/dfm-io/dfm-io/private/denumerator_p.h @@ -1,4 +1,4 @@ -// SPDX-FileCopyrightText: 2020 - 2023 UnionTech Software Technology Co., Ltd. +// SPDX-FileCopyrightText: 2020 - 2026 UnionTech Software Technology Co., Ltd. // // SPDX-License-Identifier: GPL-3.0-or-later