Newsgroup: it.comp.programmare.win32
Titolo: File name unico

Salve, mi trova nella necessità di salvare in un unica directory qualche
migliaio di immagini create dal mio programma.
Il mio problema è che devo salvare le immagini con l'estensione JPG ed in
maniera da avere un nome unico per ogni immagine - Non devo mai cancellare
un'immagine esistente.
La funzione di libreria tmpnam non sembra applicabile perchè non considera
la mia path se la variabile di sistema TMP è definita.
Devo riscrivere la ruota o qualcuno ha già battuto il capino sul problema ?
Ciao Ciao

 Devo riscrivere la ruota o qualcuno ha già battuto il capino sul problema ?
Se il nome non è interessante gli puoi dare la rappresentazione del timer 
in quel momento (es: "20030523113500" o magari anche con i microsecondi).
Altrimenti ti memorizzi un tempfile contenente l'ultimo id generato 
(0000-0001-ecc), usi quel nome dall'id e aggiorni questo tempfile. 
-- 
Luc.


Se proprio non vuoi usare un altro file contente l'ultimo ID (secondome
pero' e' forse la soluzione migliore) puoi ciclare tutti i file della dir
(FindFirstFile/FindNextFile) e memorizzare il massimo valore numerico
incontrato, incrementarlo di uno e partire da quello. Se invece vuoi fare
una cosa un po' piu' sporca (un po' tanto sporca, per i miei gusti) puoi
fare cosi':
1. crei una list box invisibile con lo stile LBS_SORT settato.
2. con il messaggio LB_DIR aggiungi i file che hai gia' creato
(c:/path/file?????.jpg)
3. prendi l'ultimo elemento
4. parti da quello a contare per creare tutti i file (dopo aver distrutto la
lista)
Spero funzioni, e' un'idea che mi e' venuta adesso... mai provata...
Luca

 
GetTempFileName
-- 
Valter Minute
vmi...@inwind.it
 (the reply address of this message is invalid)

 GetTempFileName
Ah, forse allora ho capito male io. Avevo capito che i file non erano file
temporanei, ma piu' una roba tipo quello che fanno le macchine fotografiche
digitali, che ogni volta generano nomi di file incrementati a partire
dall'ultimo.
Luca

 
GetTempFileName ritorna un nome file univoco, ed è quello che 
chiedeva il nostro amico. L'unico inconveniente può essere 
rappresentato dall'estensione TMP che non è modificabile.
Un'alternativa potrebbe essere quella di utilizzare un timestamp fino 
al secondo (se usi il formato YYYYMMDDhhmmss c'è il vantaggio di 
avere corrispondenza tra ordine alfabetico e ordine di data) e 
appendere poi un contatore o un numero casuale, utilizzando poi 
CreateFile con il flag CREATE_NEW per controllare se il file esiste 
e, in caso, riprovare incrementando il contatore o generando un nuovo 
numero casuale.
L'inconveniente di soluzioni basate sull'elenco dei file è che più 
copie del programma (sullo stesso PC o in rete) potrebbero cercare di 
creare un file più o meno nello stesso momento e, se entrambi leggono 
la directory prima che l'altro abbia creato il file, rischiano di 
generare un nomefile duplicato. Utilizzando createfile il file 
risulterà aperto e quindi non scrivibile.
Se la directory in cui si creano i files è condivisa in rete tra più 
PC aggiungerei al timestamp anche qualcosa che identifichi il PC.
P.S. quando rispondi a un messaggio, evita di riportare tutto il 
testo originale. 
http://www.uwasa.fi/~ts/http/quote.html



Puntualissimo e precissimo Valter !!!!
Ok. Anche stavolta hai vinto tu, questa mi sembra la mia soluzione - non è
la prima volta che mi 'sblocchi'..
Ero convinto che data la classicità del problema esistesse una qualche
funzione di sistema che mi potesse aiutare.
Per spiegarmi meglio:
L'applicazione 'vorrebbe' essere una applicazione server che raccoglie
immagini da più client e li salva in cartelle diverse.
Ogni cartella un solo produttore, ma l'estensione del file e la cartella di
salvataggio devono essere decisi in maniera non ambigua.
Un giorno dovrà essere portata sotto UNIX e quindi niente list box ecc.
Grazie agli amici che mi hanno risposto.