apache / apache/cordova-plugin-file

Directory read returns broken FileEntry objects

オープン
#653 コメント 3 件 リアクション 0 件 担当者 0 名 GitHub で見る
bug platform: android platform: browser
主要言語
JavaScript
スター
744
フォーク
754
平均マージ
3日 4時間
マージ済み PR(30日)
1

説明

# Bug Report

## Problem

### What is expected to happen?
I should be able to read a FileEntry's metadata no matter how I got hold of the object

### What does actually happen?
I retrieving the FileEntry handle directly via `resolveLocalFilesystemURL` I can call getMetadata() on the returned object without an issue; but if I obtain the handle by reading the parent (root) directory, the call will result in NOT_FOUND_ERR`

### Command or Code

I am running the below code in the `deviceready` event handler:
```
console.log('Running cordova-' + cordova.platformId + '@' + cordova.version);

function errorHandler(e) {
console.error("Error: ", e);
}

function testFileMetadataRead() {
console.log("Successful file write...");

window.resolveLocalFileSystemURL(cordova.file.dataDirectory + "/test.txt", function(file) {
console.log("Contructor of FILE handle", file.constructor);
file.getMetadata(
function (m) { console.log("Getting FILE metadata", file, m) },
function (e) { console.log("Error getting FILE metadata", e) }
);
}, errorHandler);

window.resolveLocalFileSystemURL(cordova.file.dataDirectory, function(dir) {
dir.createReader().readEntries(function (entries) {
entries.forEach(function(entry) {
console.log("Contructor of DIRECTORY ENTRY handle", entry.constructor);
entry.getMetadata(
function (m) { console.log("Getting DIR ENTRY metadata", file, m) },
function (e) { console.log("Error getting DIR ENTRY metadata", e) }
);
});
}, function (e) { console.log("Error listing directory", e) });
}, errorHandler);
}

window.resolveLocalFileSystemURL(cordova.file.dataDirectory, function(dir) {
dir.getFile("test.txt", { create: true, exclusive: false }, function (fileEntry) {
fileEntry.createWriter(function (fileWriter) {
fileWriter.onwriteend = testFileMetadataRead;
fileWriter.onerror = function (e) { console.log("Error writing FILE", e) };

const blob = new Blob(["The quick brown fox jumps over the lazy dog!"], { type: 'text/plain' });
fileWriter.write(blob);
});
},
function (e) { console.log("Error creating new file", e) });
}, errorHandler);
```

## Result
```
Running cordova-browser@7.0.0 bundle.js:480:13
Successful file write... bundle.js:509:17

Contructor of FILE handle
function FileEntry(name, fullPath, fileSystem, nativeURL)
bundle.js:512:21

Getting FILE metadata
Object { isFile: true, isDirectory: false, name: "test.txt", fullPath: "/test.txt", filesystem: {…}, nativeURL: null }
Object { modificationTime: Date Sun Mar 22 2026 16:13:17 GMT+0000 (Greenwich Mean Time), size: 44 }
bundle.js:514:40

Contructor of DIRECTORY ENTRY handle
function FileEntry(name, fullPath, fileSystem, nativeURL)
bundle.js:522:29

Error getting DIR ENTRY metadata
Object { code: 1 }
bundle.js:525:48
```

### Environment, Platform, Device

Using Cordova Browser for testing on Linux Mint 22.3.

### Version information

cordova-browser@7.0.0
cordova-plugin-file@8.1.3
cordova-plugin-webpack@1.0.5

## Checklist

- [x] I searched for existing GitHub issues
- [x] I updated all Cordova tooling to most recent version
- [x] I included all the necessary information above

コントリビューションガイド

コントリビューションガイドを開く

調査の方向性

resolveLocalFileSystemURL、createReader().readEntries()、getMetadata()を使用するdevicereadyの再現から始め、直接解決されたFileEntryとディレクトリから返されたエントリを比較します。記載されているCordova Browserおよびfile-pluginのバージョンで再現します。両方のハンドルでNOT_FOUND_ERRなしにメタデータの取得が成功すれば完了です。

索引モデルが issue の本文から書いたものです。

評価

技術スタック
javascript
領域
mobile-dev
issue の種類
バグ
難易度
3/5
見積もり時間
1〜2日
活発さ
静か
明瞭さ
おおむね明確
初心者へのやさしさ
55/100

新しい issue をメールで受け取る

初心者向けの GitHub issue を短くまとめたダイジェスト。