react-native-fs: RNFS.writeFile() -> ENOENT: open failed: EEXIST (File exists) - if file is deleted manually
On a real Android device, RNFS.writeFile() fails saying ENOENT: open failed: EEXIST (File exists), while RNFS.exists() returns false. This occurs after the file was created by the app, and then deleted manually from the file system. This problem does NOT occur on an Android emulator.
Scenario to reproduce: ON A REAL DEVICE:
- Use RNFS.writeFile() to create a file
- Using a file access software, e.g. Google Files, delete the created file (above).
- Try to re-create the file again using RNFS.writeFile()
- You get an error
ENOENT: open failed: EEXIST (File exists), while it has been deleted, and the result ofRNFS.exists()confirms that it is not there?!
Device Infomation:
Samsung Galaxy S10+
Android Version: 11
One UI Version: 3.1
Google Play system update: 1 August 2021
Kernel version: 4.14.113.22340597
#1 Wed Dec 1 11:14:06 KST 2021
Code:
try {
const fileExists = await RNFS.exists(fullPath);
console.log("fileExists:", fileExists, "fullPath:", fullPath, ); // fileExists: false - fullPath: /storage/emulated/0/Download/myFileName.csv
if (fileExists) {
// Execution never reaches this point
console.log("inside if statement", );
await RNFS.unlink(fullPath);
console.log("file deleted");
}
// The following statement triggers the catch (below)
await RNFS.writeFile(fullPath, fileContents, "utf8");
// execution never reaches this point
console.log("file Written");
}
catch (err) {
console.error("err:", err ); // err: [Error: ENOENT: open failed: EEXIST (File exists), open '/storage/emulated/0/Download/myFileName.csv']
}
Versions:
"react-native": "0.66.4",
"react-native-fs": "^2.18.0",
About this issue
- Original URL
- State: open
- Created 2 years ago
- Reactions: 4
- Comments: 15
Fixed by this way:
I believe that android caches the filenames even after you delete them. I have Android File Manager and when I delete a file through there and close the app I am able to save the file with the same name successfully. If I delete the file from the file manager on the device and try to resave with the same name then it throws the “already exists” error.