Kan javascript een txt bestand aanpassen?

Status
Niet open voor verdere reacties.

jasperdj

Gebruiker
Lid geworden
17 nov 2007
Berichten
23
Kan javascript een txt bestand aanpassen, het lijkt me niet.
Maar iemand zei dat hij dat kon, kep me helemaal suf gezocht en geprobeerd zoiets te maken. Maar het lukt me niet, is dit mogelijk zoja hoe????

greetz,

jasperdj
 
Is niet mogelijk. Het is vanwege de veiligheid niet mogelijk om met javascript een bestand op de computer van de bezoeker te schrijven.

Dit wordt (volgens mij) geblokkeerd door Windows, mócht het überhaupt al mogelijk zijn met javascript.
 
In IE kan het met het FileSystemObject (FSO):
http://msdn2.microsoft.com/en-us/library/6kxy1a51.aspx

Bijvoorbeeld:
PHP:
<script type="text/javascript">

// JScript

var fso = new ActiveXObject("Scripting.FileSystemObject");

var a = fso.CreateTextFile("C:\\testfile.txt", false);

a.WriteLine("This is a test.");

a.Close();

</script>
Dit script maakt en schrijft de testfile (als die nog niet bestaat). Je krijgt wel een waarschuwing voor een Active-X element dat je moet toestaan.

Met FSO kan je een txt-bestand lezen en/of schrijven en ook mappen uitlezen. Maar het is meer geschikt voor op je eigen harde schijf dan dat het voor bezoekers van een website handig is. Het ligt eraan wat je wilt doen. :)


Vr.Gr. Egel.
 
Heey super, dat zocht ik nou net.
Maar ik probeerde een als url:

C:\\Documents and Settings\Jasper dj\Bureaublad\javascripts\test.txt

Maar er gebeurt niets in die map, hoe zit dat????
En kan je ook bestanden verwijderen?

greetz,

jasperdj
 
Laat maar... :)

Nee ik heb het al, ik heb een javascriptje gemaakt die een update maakt, en kan wijzigen:

HTML:
<html>
<center>
<head>

<form name="updateform" method="SEND" action="javascript:update()">

  <textarea name="updatetxt" cols="50" rows="8" value=" "id="bericht"></textarea><br>
  <INPUT type="submit" value="Wijzig update!!"> 

</form>

</head>
 

<script type="text/javascript"> 


// JScript 


function update() {
   var fso = new ActiveXObject("Scripting.FileSystemObject"); 
   fso.DeleteFile("C:\\Documents and Settings\\Jasper dj\\Bureaublad\\javascripts\\test.txt", true);
   var a = fso.CreateTextFile("C:\\Documents and Settings\\Jasper dj\\Bureaublad\\javascripts\\test.txt", false); 

      a.WriteLine("Nieuwe update mogelijkheden: " + document.updateform.updatetxt.value + ""); 

      a.Close(); 

}

</script>
 
Javascript gebruikt de \ als escape teken, zo geef je foto's in een string op als: var tekst = 'foto\'s';

De backslash moet daardoor zelf ook ge-escaped worden, gewoon dubbel:
Code:
var a = fso.CreateTextFile('C:\\Documents and Settings\\Jasper dj\\Bureaublad\\javascripts\\test.txt
',false);
:)

Handiger is het om de mapnaam met javascript op te vragen en daar de bestandsnaam aan toe te voegen:
Code:
<script type="text/javascript">
 var dir = unescape(location.href);
 dir = dir.substring(dir.lastIndexOf('//') + 2,dir.lastIndexOf('/') + 1).replace(/\//g,'\\');
 var str = 'Testfile regel een.\r\nRegel twee.\r\nTesfile einde.\r\n';
 var fso = new ActiveXObject("Scripting.FileSystemObject");
 var a = fso.CreateTextFile(dir + '\\testfile.txt',false);
 a.Write(str);
 a.Close();
 document.writeln('testfile.txt is geschreven.');
</script>
In deze regel:
Code:
 var a = fso.CreateTextFile(dir + '\\testfile.txt',false);
is false belangrijk. Het zorgt ervoor dat als testfile.txt al bestaat die niet overschreven wordt (in plaats daarvan krijg je dan een javascript foutmelding).

Als je script eenmaal getest is kun je daar true invullen en dan wordt een bestaande testfile.txt wel overschreven.

Hier staat hoe je kunt deleten:
http://msdn2.microsoft.com/en-us/library/czxefwt8.aspx
(Altijd voorzichtig mee zijn! ;))


Vr.Gr. Egel.
 
Laatst bewerkt:
String??? Hoezo?

Hoezo voeg jij een string toe aan de waarde, die je toestuurd naar test.txt
En hoe wil je die oproepen of aanpassen???
 
str is gewoon een variabele:
Code:
var str = 'Nieuwe update mogelijkheden: ' + document.updateform.updatetxt.value;
a.WriteLine(str);
Je had het al gevonden zie ik nu. Als het goed werkt kun je false door true vervangen bij fso.CreateTextFile en dan wordt de bestaande test.txt telkens overschreven. :)


Vr.Gr. Egel.
 
Laatst bewerkt:
Nog effe een vraagje

Kan je de inhoud dan ook gebriken als variable, en kan je de inhoud in je pagina laten zien zonder een tekstvak of frame of wat dan ook?

greetz,

jasperdj
 
Zo kan je bv de inhoud in een pagina weergeven;
Code:
<script type="text/javascript">
 var dir = unescape(location.href);
 dir = dir.substring(dir.lastIndexOf('//') + 2,dir.lastIndexOf('/') + 1).replace(/\//g,'\\');
 var fso = new ActiveXObject("Scripting.FileSystemObject");
 var ForReading = 1;
 var a = fso.OpenTextFile(dir + '\\testfile.txt',ForReading);
 var str = a.ReadAll();
 a.Close();
 str = str.split('\r\n').join('<br>');
 document.writeln(str);
</script>
De inhoud van textfile.txt verschijnt dan op de plaats van het script.

Wat bedoel je met 'zonder wat dan ook'? :) Je zou een html-file kunnen schrijven met behulp van fso. Het handigst is dan een sjabloon te gebruiken:
HTML:
<html>
 <head>
  <title>De titel</title>
 </head>
  <body>
***
 </body>
</html>
Die lees je in met .ReadAll() en *** vervang je met javascript door iets anders. Vervolgens (over)schrijf je een html-file. :)


Vr.Gr. Egel.
 
Status
Niet open voor verdere reacties.
Terug
Bovenaan Onderaan