Rubriken sa väl det mesta så jag upprepar frågan igen.
Kan man ändra läs- och skrivrättigheter på en mapp med javascript?
32 svar · 1 098 visningar · startad av Pedda
Rubriken sa väl det mesta så jag upprepar frågan igen.
Kan man ändra läs- och skrivrättigheter på en mapp med javascript?
Jag håller på att göra skivor som ska distribueras med en massa filer på (pdf och zipfiler mest).
På skivan finns en del htmlfiler, bl.a en som innehåller ett javascript som sparar innehållet på skivan till hårddisken.
Problemet blir när det är flera skivor eftersom när den första skivan kopieras så blir ju mapparna skrivskyddade, och då går det inte att kopiera dom övriga skivorna.
emission skrev:
... med lokalt exekverad JScript och WMI ...
Berätta gärna mer eller om du har några bra länkar.
emission vilken wmi-class tänker du på då? Win32_Directory har ju bara Writable som ett readonly värde. Det enda jag hittat som kan sätta read/write/modify egenskaper är via ACL, men det används ju för att ge användare rättigheter till mappen och inte lyfta ur checkboxen för read only.
Du borde kunna använda gamla hederliga FileSystemObject som ActiveX-objekt däremot och XORa bort flaggan för readonly i bitmasken. :)
prova något sånhära. Koden är otestad då jag för tillfället sitter på min macbook :p
var ReadOnly = 1;
var fso = new ActiveXObject("Scripting.FileSystemObject");
var objFolder = fso.GetFolder("C:\\apa\\foo"); //man måste escapea slasharna i sökvägen :)
objFolder.Attributes=(objFolder.Attributes ^ ReadOnly); //XOR:ar folderns attribut med bit-värdet för readonly
Du skulle kunna få den som vbscript också... :)
const ReadOnly=1
set fso = createobject("Scripting.FileSystemObject")
set objFolder = fso.GetFolder("C:\apa\foo")
objFolder.Attributes = objFolder.Attributes XOR ReadOnly
I värsta fall kan vi ju prova en ann lite enklare variant...
Skapa en activex-kontroll som kan anropa cmd-kommandon, och den utomordentliga attrib.exe.....få se nu.
var wshShell = new ActiveXObject("WScript.Shell");
wshShell.Run("attrib -r c:\\apa\\foo\\") //För att fånga upp fel skulle vi kunna använda wshShell.exec() istället, men den stödjs endast av xp och uppåt
och i vbscript:
set wshShell = createobject("WScript.Shell")
wshShell.Run("attrib -r c:\apa\foo\") ' Exec funkar även här, men med samma klausul som ovan.
angående attrib:
http://www.microsoft.com/resources/documentation/windows/xp/all/proddocs/en-us/attrib.mspx?mfr=true
iofs så tror jag vid närmare eftertanke att attrib endast finns i xp också...men, men...jag får väl återkomma imorgon med en sådan funktion.
Nu ska jag sova.
Det är inte XOR:a man ska göra om man vill ha bort en flagga, det är AND:a med flaggans bitkomplement man vill göra :)
Istället för
objFolder.Attributes=(objFolder.Attributes ^ ReadOnly); //XOR:ar folderns attribut med bit-värdet för readonly
använd
objFolder.Attributes=(objFolder.Attributes & ~ReadOnly);
// alt.
objFolder.Attributes &= ~ReadOnly;
Mappen får inte skrivrättigheter med varken:
objFolder.Attributes=(objFolder.Attributes ^ ReadOnly);
eller
objFolder.Attributes &= ~ReadOnly;
Är ni säkra på att ReadOnly ska vara 1? Eller vad kan det bero på annars?
På filer är det det som är det korrekta, jag förutsatte att det samma skulle funka på mappar.. :/
/Red du får inget felmeddelande antar jag?
/Red.2 Har du provat attrib-grejen? I värsta fall kan du ju bundla med den på skivan...
Testade attrib nu och den körs (prompten flashar till) men skrivskyddet är kvar.
Felmeddelandet jag får när jag kopierar skiva 2 är Permission denied och det är ju inte så konstigt när målmappen är skrivskyddad.
my bad...jag som var lite snurrig... :)
Prova det här istället:
var wshShell = new ActiveXObject("WScript.Shell");
wshShell.run("%COMSPEC% /c attrib -r c:\\apa\\foo")
%COMSPEC% innehåller sökvägen till cmd.exe, som vi då anropar med /c (för att avsluta när exekveringen är klar) och med efterföljande parametrar...dessutom så ska man inte ha några slashar efter sista mappen för då hittar inte attrib mappen.
Jag hade inga slashar efter mappen så jag tror inte att det kommer att göra nån skillnad.
Jag har ju moddat lite andra grejer också...får du nåt fel-meddelande på koden?
/Red.
Du kan ju posta in exakt kod här som du använder så kan jag kolla på hur det ser ut. :)
Du kan även prova att byta /c till /k för att att ha kvar kommandoprompten efter exekvering av kommandona.
Nope, hjälpte inte.
(och prompten flashade fortfarande)
/red
Såg din redigering nu så här har du koden där jag kopierar mappen
var wshShell = new ActiveXObject("WScript.Shell");
fso.CopyFolder(pathName, destination + dir + "\\Data", true);
wshShell.Run("%COMSPEC% /c attrib -r " + destination + dir + "\\Data");
Byt ur /c mot /k så får du se felmeddelandet som kommer upp i prompten.. :)
Japp, fick ett felmeddelande:
Parameter format not correct
Spännande...vad händer om du kastar upp en: alert("attrib -r " + destination + dir + "\\Data")
och om du kör den i kommandotolken själv, får du samma fel då?
Hela felmeddelandet är så här förresten:
Parameter format not correct -
C:\Documents and Settings\pesc\Desktop>
Varför står det en sökväg till Desktop??
/red
Parameter format not correct står det när jag kör direkt i cmd också.
Det är ju default vyn efter att du har exekverat ett kommando...för att du ska kunna skriva ett nytt....