Originariamente inviato da stejano
ciao a tutti avevo una curiosità.
spesso mi capita di dover metter dei file che poi richiamo in dei punti standard del computer
ad esempio se voglio richiamare il file ciccio.bmp:
io lo piazzo in c:\ e poi lo richiamerò nel programma con c:\ciccio.bmp, se distribuirò il programma farò mettere lì quel file e andrà così su tutti i pc.
Non è una buona prassi: la cartella radice del disco di sistema sui sistemi NT (quindi NT, 2000, XP, 2003 Server e Vista) è protetta di default da un'ACL che consente solamente ad amministratori e Power Users di creare e modificare file, per cui i normali utenti limitati non saranno in grado di eseguire la tua applicazione.
ci sono altri punti abbastanza standard in cui piazzare i propri file?in maniera che poi distribuendo il file, con facilità sia richiamabile??
non è possivile mettere il file nella stessa cartella del programma tipo le librerie e poi richiamarlo?se sì come?
oppure quali altre cartelle di windows posso sfruttare?
a volte mi capita anche di dover generare dei file temporanei, che poi rimangono lì però. perchè non li cancello ma li faccio sovrascrivere...con quelli come posso fare???
grazie!
In linea di massima non bisognerebbe MAI inserire un percorso hardcoded nel codice del proprio programma, perché non è detto che tale percorso esista o che l'utente abbia i permessi per accederci. Il modo corretto per scrivere file su disco senza che l'utente dica dove devono andare è usare le variabili di ambiente per ottenere i percorsi standard; le linee guida sono queste:
  • i file di configurazione per-user dell'applicazione vanno in %appdata%\nomeapplicazione (in VB.NET puoi usare anche solo Application.UserAppDataPath, che restituisce %appdata%\nomeproduttore\nomeprodotto\versioneprod otto);
  • i file temporanei vanno in %tmp% (o in %temp%);
  • i file di configurazione dell'applicazione modificabili solo dall'amministratore vanno messi nella cartella dell'applicazione (App.Path in VB6, Application.StartupPath in VB.NET);
  • i file di configurazione comuni a tutti gli utenti e modificabili da tutti vanno in %allusersprofile%\nomeapplicazione (in VB.NET puoi usare anche solo Application.CommonAppDataPath, che restituisce %allusersprofile%\nomeproduttore\nomeprodotto\vers ioneprodotto);
  • nient'altro andrebbe messo in altri posti (in verità ci sarebbe anche la distinzione tra appdata in roaming o locale, ma non stiamo a sottilizzare).

I file temporanei ovviamente dovrebbero essere cancellati quando non servono più.