webForumDet fria alternativet

Kan man ändra läs- och skrivrättigheter med javascript?

JavaScriptur Javascript

32 svar · 1 098 visningar · startad av Pedda

Medlem sedan juni 20006 031 inlägg
Frågan#1

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?

Medlem sedan dec. 19996 721 inlägg
#2

Nej. Man kan göra det med lokalt exekverad JScript och WMI, men inte via webbläsaren.

Hur så?

Medlem sedan juni 20006 031 inlägg
#3

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.

Medlem sedan juni 20006 031 inlägg
#4

emission skrev:

... med lokalt exekverad JScript och WMI ...

Berätta gärna mer eller om du har några bra länkar.

Medlem sedan juni 20014 421 inlägg
#5

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.

Medlem sedan juni 20008 205 inlägg
#6

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;
Medlem sedan juni 20006 031 inlägg
#7

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?

Medlem sedan juni 20014 421 inlägg
#8

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...

Medlem sedan juni 20006 031 inlägg
#9

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.

Medlem sedan juni 20014 421 inlägg
#10

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.

Medlem sedan juni 20006 031 inlägg
#11

Jag hade inga slashar efter mappen så jag tror inte att det kommer att göra nån skillnad.

Medlem sedan juni 20014 421 inlägg
#12

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.

Medlem sedan juni 20006 031 inlägg
#13

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");
Medlem sedan juni 20014 421 inlägg
#14

Byt ur /c mot /k så får du se felmeddelandet som kommer upp i prompten.. :)

Medlem sedan juni 20006 031 inlägg
#15

Japp, fick ett felmeddelande:
Parameter format not correct

Medlem sedan juni 20014 421 inlägg
#16

Spännande...vad händer om du kastar upp en: alert("attrib -r " + destination + dir + "\\Data")

Medlem sedan juni 20006 031 inlägg
#17

attrib -r C:\test\DVDLib\Data

Sökvägen är rätt

Medlem sedan juni 20014 421 inlägg
#18

och om du kör den i kommandotolken själv, får du samma fel då?

Medlem sedan juni 20006 031 inlägg
#19

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å.

Medlem sedan juni 20014 421 inlägg
#20

Det är ju default vyn efter att du har exekverat ett kommando...för att du ska kunna skriva ett nytt....

137 ms totalt · 3 externa anrop · v20260731065814-full.b746b907
0 ms — hämta forumlista (cache)
0 ms — hämta statistik (cache)
134 ms — hämta tråd, inlägg och bilagor (db)