Tilgang og skrivning til INI-filer
Jeg ved at lave et program der skal oprette en mappe der hedder Exported og så i samme process sætte ikonet på denne til et fra min resource-biblotek. Det virker fint nok, men problemet er at hvis mappen allerede er oprettet men ikonet ikke er blevet sat så kan jeg ikke sætte ikonet igen.Dette er fordi at windows ikke giver mig adgang til filen.
I hver mappe findes en desktop.ini fil som kan bestemme hvilken tooltip-tekst der skal vises når du peger på mappen og hvilket ikon det skal have osv osv..
Når den skal oprettes er der ikke problemer med rettigheder for windows ved ikke noget om filen endnu.. Men når den ER oprettet vil den ikke lade mig tilgå den..
Har prøvet med
File.Open(tempPath, FileMode.Create, FileAccess.ReadWrite, FileShare.ReadWrite);
i det tilfælde hvor den ALLEREDE ER oprettet..
Filemode.Create er at enten laves filen eller overskrives, Filesacces siger sig selv og Fileshare.ReadWrite er også ligeud af landevejen..
Forresten hvis i vil læse mere om dem så ligger de under
System.IO
Jeg har undersøgt det og C# har ikke nogen IniFile klasse eller andet der kan hjælpe dig. Det er simpelthen for gammeldags og er derfor blevet fjernet så man selv skal bearbejde en INI-fil hvis det nødvendigt.
Grunden til jeg vil sætte ikonet næste gang programmet køres er fordi at nogen gange så "rydder windows op" og så fjernes det custom satte ikon.
Og en anden ting er at det store ikon bliver sat, men hvis du går ind i mappen og ser i venstre øverste hjørne skulle der helst være samme ikon blot i lille, men dette kommer ikke.
Skal jeg sætte dette seperat?
Jeg bruger en alm. StreamWriter til at skrive til den og skriver følgende:
sw.WriteLine("[.ShellClassInfo]");
sw.WriteLine("ConfirmFileOp={0}", true);//confirmDelete);
sw.WriteLine("NoSharing={0}", true);//preventSharing);
sw.WriteLine("IconFile={0}", IconPath);//iconFile);
sw.WriteLine("IconIndex={0}", 0);//iconIndex);
sw.WriteLine("InfoTip={0}", "Exported files for the Installer Project - Made by InstallerDeveloper");//toolTip);
sw.Close();