ECRIRE DANS MSDOS.SYS

Résolu
mikesvl Messages postés 4 Date d'inscription samedi 25 juin 2005 Statut Membre Dernière intervention 27 août 2005 - 24 juil. 2005 à 00:05
mikesvl Messages postés 4 Date d'inscription samedi 25 juin 2005 Statut Membre Dernière intervention 27 août 2005 - 25 juil. 2005 à 01:07
Malgré plusieurs essais je n'arrive pas écrire dans le fichier
MSDOS.SYS. Voici la procédure utilisée (voir ci-dessous). A l'éxécution
j'ai un message me disant 'impossible d'écrire dans c:\MSDOS.sys'. Je
ne vois pas l'erreur.... Je modifie pourtant les attributs du
fichier....

Merci.



procedure pilote_disk_compress;

var attrib :byte;

begin

attrib:=FileGetAttr('c:\msdos.sys');

attrib:=attrib and not faReadOnly and not fahidden and not fasysfile;

filesetattr('c:\msdos.sys',attrib);

fichierini := Tinifile.Create('c:\msdos.sys');

if form1.CheckBox_pilote_disk_compress.State=cbChecked then

begin


fichierini.WriteString('Options','DBLSpace','0');


fichierini := Tinifile.Create('c:\msdos.sys');


fichierini.WriteString('Options','DRVSpace','0');

end

else

begin


fichierini.WriteString('Options','DBLSpace','1');


fichierini := Tinifile.Create('c:\msdos.sys');


fichierini.WriteString('Options','DRVSpace','1');

end;

attrib:=FileGetAttr('c:\msdos.sys');

attrib:=attrib or faReadOnly or fahidden or fasysfile;

filesetattr('c:\msdos.sys',attrib);

pilote_disk_compresse:=false;

end;

2 réponses

cs_grandvizir Messages postés 1106 Date d'inscription samedi 8 novembre 2003 Statut Membre Dernière intervention 3 septembre 2006 22
24 juil. 2005 à 21:30
Si on résume, tu enchaînes grosso-modo (qu'elle que soit la condition) ceci :
fichierini := Tinifile.Create('c:\msdos.sys');
fichierini.WriteString('Options','DBLSpace','0');
fichierini := Tinifile.Create('c:\msdos.sys');


Sur le Create, le fichier est ouvert, et tu le réouvres 2 lignes après : impossible !


TIniFile est une classe, et doit être libérée. Je te donne un code bien plus simple qui devrait effacer les horribles redondances programmistiques que j'ai vues dans ton code (en plus, ce code est plus court) :


procedure pilote_disk_compress;
const FN = 'c:\msdos.sys';
ISection = 'Options';
var Cle : char;
begin
filesetattr(FN,FileGetAttr(FN) and not faReadOnly and not fahidden and not fasysfile);
Cle: =Chr(Ord('0') + Ord(not form1.CheckBox_pilote_disk_compress.Checked));
with TInifile.Create(FN) do //Ouverture...
try
WriteString(ISection,'DBLSpace',Cle);
WriteString(ISection,'DRVSpace',Cle);
finally
Free; //... Fermeture
end;
filesetattr(FN,FileGetAttr(FN) or faReadOnly or fahidden or fasysfile);
pilote_disk_compresse:= false;
end ;


Je t'embête avec la ligne Cle: =... mais c'est pour voir comment des conditions peuvent être compactées.

===========
Validez les réponses si ok...

ViewVite XP : HTML
3
mikesvl Messages postés 4 Date d'inscription samedi 25 juin 2005 Statut Membre Dernière intervention 27 août 2005
25 juil. 2005 à 01:07
Merci pour tout.... la solution à mon problème et la belle leçon de programmation.
0