digitalmars.D.learn - Advice on : rmdirRecurse and setAttributes in Windows
- Vino (24/24) Apr 21 2018 Hi All,
 - WebFreak001 (5/29) Apr 22 2018 This seems very hacky, you should instead just replicate the
 
Hi All,
   The function rmdirRecurse does not work in Windows if the file 
has the READ ONLY permission, so to over come this issue, i have 
written the below function to set the permission on file and 
folder using the function "setAttributes" , so can any one advice 
me whether the below code is fine or what are the other ways to 
achieve the same.
auto aPrivileges(T)(T df)
if(df[0].isDir) {
             auto sDir = Array!string(dirEntries(join([`\\?\`, 
df[0]]), SpanMode.depth).filter!(a => a.isDir).map!(a => 
(a.name)));
             auto sFile = Array!string(dirEntries(join([`\\?\`, 
df[0]]), SpanMode.depth).filter!(a => a.isFile).map!(a => 
(a.name)));
             foreach(sD; parallel(sDir[], 1)) { 
setAttributes(sD.toUTF16, 66); }
             foreach(sF; parallel(sFile[], 1)) { 
setAttributes(sF.toUTF16, 666); }
             }
         else { setAttributes(df[0].toUTF16, 666); }
}
From,
Vino.B
 Apr 21 2018
On Saturday, 21 April 2018 at 18:39:02 UTC, Vino wrote:
 Hi All,
   The function rmdirRecurse does not work in Windows if the 
 file has the READ ONLY permission, so to over come this issue, 
 i have written the below function to set the permission on file 
 and folder using the function "setAttributes" , so can any one 
 advice me whether the below code is fine or what are the other 
 ways to achieve the same.
 auto aPrivileges(T)(T df)
 if(df[0].isDir) {
             auto sDir = Array!string(dirEntries(join([`\\?\`, 
 df[0]]), SpanMode.depth).filter!(a => a.isDir).map!(a => 
 (a.name)));
             auto sFile = Array!string(dirEntries(join([`\\?\`, 
 df[0]]), SpanMode.depth).filter!(a => a.isFile).map!(a => 
 (a.name)));
             foreach(sD; parallel(sDir[], 1)) { 
 setAttributes(sD.toUTF16, 66); }
             foreach(sF; parallel(sFile[], 1)) { 
 setAttributes(sF.toUTF16, 666); }
             }
         else { setAttributes(df[0].toUTF16, 666); }
 }
 From,
 Vino.B
This seems very hacky, you should instead just replicate the 
behaviour of rmdirRecurse. This is what I did in the dub library 
which does this thing for you: 
https://github.com/WebFreak001/rm-rf/blob/master/source/rm/rf.d
 Apr 22 2018








 
 
 
 WebFreak001 <d.forum webfreak.org>