removeSync() NotFound error while folder exists when used on Network Drive on Windows
I encounter some error when trying to remove a folder on a network drive on Windows (e.g Mounted Google Drive)
// I am on a network drive
> Deno.cwd()
"G:\\Mon Drive\\Projects"
> import { existsSync } from "https://deno.land/[email protected]/fs/exists.ts";
undefined
// creating a directory
> Deno.mkdirSync("new_dir");
undefined
> await Deno.writeTextFile("new_dir/hello.txt", "Hello World!");
undefined
// It is seen as existing
> existsSync('new_dir')
true
// And seen as not empty
> Deno.removeSync('new_dir')
Uncaught Error: Le répertoire n’est pas vide. (os error 145): remove 'new_dir'
at Object.removeSync (ext:deno_fs/30_fs.js:175:7)
at <anonymous>:2:6
// But still NotFound when I try to remove it
> Deno.removeSync('new_dir', {recursive: true})
Uncaught NotFound: Le fichier spécifié est introuvable. (os error 2): remove 'new_dir'
at Object.removeSync (ext:deno_fs/30_fs.js:175:7)
at <anonymous>:2:6
Is there some specific limitation which such Drive on Windows ? Or alternative to use ?
> deno --version
deno 1.33.1 (release, x86_64-pc-windows-msvc)
v8 11.4.183.1
typescript 5.0.3
I believe the issue has evolved because now the directory is deleted, even if there is an error message thrown
$ deno --version
deno 1.38.5 (release, x86_64-pc-windows-msvc)
v8 12.0.267.1
typescript 5.2.2
> Deno.cwd()
"G:\\Mon Drive\\TESTING"
> import { existsSync } from "https://deno.land/[email protected]/fs/exists.ts";
undefined
> Deno.mkdirSync("new_dir");
undefined
> await Deno.writeTextFile("new_dir/hello.txt", "Hello World!");
undefined
// Folder exists
> existsSync('new_dir')
true
// Listing dir
> async function getNames(currentPath: string) {
const names: string[] = [];
for await (const dirEntry of Deno.readDir(currentPath)) {
const entryPath = `${currentPath}/${dirEntry.name}`;
names.push(entryPath);
if (dirEntry.isDirectory) {
names.push(await getNames(entryPath));
}
}
return names;
}
undefined
// Not empty
> console.log(await getNames(Deno.cwd()));
[
"G:\\Mon Drive\\TESTING/new_dir",
[ "G:\\Mon Drive\\TESTING/new_dir/hello.txt" ]
]
> Deno.removeSync('new_dir')
Uncaught Error: Le répertoire n’est pas vide. (os error 145): remove 'new_dir'
at Object.removeSync (ext:deno_fs/30_fs.js:189:7)
at <anonymous>:1:27
// Removing with recursive does error
> Deno.removeSync('new_dir', {recursive: true})
Uncaught NotFound: Le fichier spécifié est introuvable. (os error 2): remove 'new_dir'
at Object.removeSync (ext:deno_fs/30_fs.js:189:7)
at <anonymous>:1:27
// However, directory is deleted
> existsSync('new_dir')
false
> console.log(await getNames(Deno.cwd()));
[]
undefined
Has anything change that would lead to this behavior ?
While looking at a new issue, I know understand the problem is with empty directories.
> Deno.cwd()
"G:\\Mon Drive\\TESTING"
> Deno.mkdirSync("new_dir");
undefined
> Deno.mkdirSync("new_dir/empty_dir");
undefined
> Deno.mkdirSync("new_dir/not_empty");
undefined
> await Deno.writeTextFile("new_dir/not_empty/hello.txt", "Hello World!");
undefined
> import { existsSync } from "https://deno.land/[email protected]/fs/exists.ts";
undefined
> // Listing dir
undefined
> async function getNames(currentPath: string) {
const names: string[] = [];
for await (const dirEntry of Deno.readDir(currentPath)) {
const entryPath = `${currentPath}/${dirEntry.name}`;
names.push(entryPath);
if (dirEntry.isDirectory) {
names.push(await getNames(entryPath));
}
}
return names;
}
undefined
> console.log(await getNames(Deno.cwd()));
[
"G:\\Mon Drive\\TESTING/new_dir",
[
"G:\\Mon Drive\\TESTING/new_dir/empty_dir",
[],
"G:\\Mon Drive\\TESTING/new_dir/not_empty",
[ "G:\\Mon Drive\\TESTING/new_dir/not_empty/hello.txt" ]
]
]
undefined
Removing empty dir works, but errors
> Deno.removeSync('new_dir/empty_dir', {recursive: true})
Uncaught NotFound: Le fichier spécifié est introuvable. (os error 2): remove 'new_dir/empty_dir'
at Object.removeSync (ext:deno_fs/30_fs.js:188:7)
at <anonymous>:1:27
> console.log(await getNames(Deno.cwd()));
[
"G:\\Mon Drive\\TESTING/new_dir",
[
"G:\\Mon Drive\\TESTING/new_dir/not_empty",
[ "G:\\Mon Drive\\TESTING/new_dir/not_empty/hello.txt" ]
]
]
undefined
Removing not empty dir works but errors
> Deno.removeSync('new_dir/not_empty', {recursive: true})
Uncaught NotFound: Le fichier spécifié est introuvable. (os error 2): remove 'new_dir/not_empty'
at Object.removeSync (ext:deno_fs/30_fs.js:188:7)
at <anonymous>:1:27
> console.log(await getNames(Deno.cwd()));
[ "G:\\Mon Drive\\TESTING/new_dir", [] ]
undefined
And if we try the whole new_dir, it will fail to remove because it will remove one directory, but errors while removing when empty
> Deno.mkdirSync("new_dir/empty_dir");
undefined
> Deno.mkdirSync("new_dir/not_empty");
undefined
> await Deno.writeTextFile("new_dir/not_empty/hello.txt", "Hello World!");
undefined
> console.log(await getNames(Deno.cwd()));
[
"G:\\Mon Drive\\TESTING/new_dir",
[
"G:\\Mon Drive\\TESTING/new_dir/empty_dir",
[],
"G:\\Mon Drive\\TESTING/new_dir/not_empty",
[ "G:\\Mon Drive\\TESTING/new_dir/not_empty/hello.txt" ]
]
]
undefined
> Deno.removeSync('new_dir', {recursive: true})
Uncaught NotFound: Le fichier spécifié est introuvable. (os error 2): remove 'new_dir'
at Object.removeSync (ext:deno_fs/30_fs.js:188:7)
at <anonymous>:1:27
> console.log(await getNames(Deno.cwd()));
[
"G:\\Mon Drive\\TESTING/new_dir",
[ "G:\\Mon Drive\\TESTING/new_dir/empty_dir", [] ]
]
undefined
>
As we see it has errored, but not_empty has been correctly removed
> deno --version
deno 1.39.0 (release, x86_64-pc-windows-msvc)
v8 12.0.267.8
typescript 5.3.3