You signed in with another tab or window. Reload to refresh your session.You signed out in another tab or window. Reload to refresh your session.You switched accounts on another tab or window. Reload to refresh your session.Dismiss alert
let path = std::path::Path::new("C:\\Users\\path\\to\\folder");//works finelet path = std::path::Path::new("\\\\?\\UNC\\Mac\\path\\to\\folder");//throw an errorlet dir = std::fs::OpenOptions::new().read(true).custom_flags(33554432u32).open(path).unwrap();let entries = cap_std::fs::Dir::from_std_file(dir).entries();dbg!(entries);
reason
After debugged, I found cap_primitives/src/windows/fs get_path cause this problem.
let wide_final = if wide.starts_with(&['\\'asu16,'\\'as_,'?'as_,'\\'as_]){&wide[4..]//throw error//&wide //change to this and it works}else{&wide
};
when path start with \\\\?\\, \\\\?\\ will be remove, and \\\\?\\UNC\\Mac\\path\\to\\folder changed to UNC\\Mac\\path\\to\\folder, so a path not found error be throwed.
My guess is that that code for removing \\\\?\\ is ensuring that we can concatenate a relative path containing forward-slash separators onto the resulting path, which I think wouldn't work if the \\\\?\\ prefix were left in place. It may be that fixing this properly will require eliminating all code in cap-std that concatenates relative paths, and using NtCreateFile directly instead. We now do that for open, but we still use path concatenation in many of the other functions.
test code
reason
After debugged, I found cap_primitives/src/windows/fs get_path cause this problem.
when path start with
\\\\?\\
,\\\\?\\
will be remove, and\\\\?\\UNC\\Mac\\path\\to\\folder
changed toUNC\\Mac\\path\\to\\folder
, so apath not found
error be throwed.dependency chain
the dependency chain is:
cap_std::fs::dir::Dir::entries
cap_primitives::fs::read_dir::read_base_dir
cap_primitives::windows::fs::read_dir_inner::ReadDirInner::read_base_dir
cap_primitives::windows::fs::read_dir_inner::ReadDirInner::new_unchecked
cap_primitives::windows::fs::get_path::concatenate
cap_primitives::windows::fs::get_path::get_path
cargo.toml
The text was updated successfully, but these errors were encountered: