Come segnalato da Repubblica, sul sito Six Revisions è possibile scaricare 40 Beatiful Free Icon Sets nei formati png e ico.
Avevo la necessità di convertire una macchina virtuale da formato Microsoft Virtual PC a Sun VirtualBox. Per chi avesse avuto lo stesso problema, la soluzione è stata abbastanza semplice: ho eseguito il download di VMware Converter 3.0.3 (Starter Edition) (previa registrazione), una volta installato è stato sufficiente lanciare il Wizard avviabile da: File\New\Convert:
e seguire i vari passi:
Impostando come Source Type: Other ed in Virtual Machine il percorso del file con estensione *.vmc. Scegliendo Avanti, il converter inizierà a leggere le informazioni del file della macchina virtuale di Microsoft Virtural PC (Ci metterà qualche minuto).
Proseguendo con il Wizard (dove è possibile ad esempio eseguire la conversione mantenendo la dimensione del disco fissa oppure ridimensionandolo per salvare spazio disco), al momento di scegliere il tipo di destinazione (Select the destination type), ho selezionato Other Virtual Machine, e nella schermata successiva, ho specificato il nome della Virtual Machine e ho selezionato Workstation 6.x, VMware Fusion 1.x, Player 2.x, ACE 2.x. Andando avanti si possono scegliere altre opzioni secondo delle proprie esigenze. Secondo della dimensione del file della Virtual Machine di cui si vuol fare la conversione, la procedura richiederà un pò di tempo (nel mio caso per una file di circa 19GB sono stati necessari più di 30 minuti).
A questo punto non resta che creare una nuova macchina virtuale su Sun VirtualBox seguendo il Wizard. Al momento della scelta dell'Hard-disk virtuale, scegliere esistente:
nel Gestore dei dischi virtuali, fare click su aggiungi e scegliere il percorso del file con estensione *.vmdk creato utilizzando il VMWare converter.
Una volta selezionato il file, è sufficiente continuare fino alla fine. Una volta terminata la procedura guidata è possibile impostare le varie opzioni per la macchina virtuale appena creata (attivare l'accesso a periferiche USB, impostare le schede di rete, cartelle condivise etc...).
Al momento, l'unico problema che ho incontrato dopo la conversione è un leggero sfarfallio del contenuto della finestra della macchina virtuale durante il passaggio della modalità a Schermo intero e viceversa o durante il ridimensionamento della finestra del sistema guest, tutto sommato nulla di particolare. Non resta che testare il comportamento durante le sessioni di lavoro.
Post nato da discussione su forum. Supponiamo di voler creare un client ftp (applicazione Windows Form) per il download/upload di file, utilizzando un controllo ProgressBar per visualizzare lo stato di avanzamento dell'operazione. Grazie alle classi messe a disposizione del Framework .Net, il codice per il download di un file remoto, potrebbe essere del tipo:
1 //Connessione con l'host
2 Connect(remotePathFile);
3
4 //Imposta il tipo di richiesta
5 _conn.Method = WebRequestMethods.Ftp.DownloadFile;
6
7 //Ottiene la risposta
8 _resp = (FtpWebResponse)(_conn.GetResponse());
9 System.IO.Stream _respStream = _resp.GetResponseStream();
10
11 if (ContinueProcess(_resp.StatusDescription))
12 {
13 //Apre il file locale per la scrittura
14 //....
15
16 try
17 {
18 //Recupera la dimensione del file come numero di bytes
19 Int64 totalBytes = GetFileSize(remotePathFile);
20 Int64 totalBytesRead = 0;
21
22 if (downloadFileStarted != null) downloadFileStarted(totalBytes);
23
24 byte[] buf = new byte[1024];
25
26 int bytesRead = _respStream.Read(buf, 0, buf.Length);
27
28 while (bytesRead != 0)
29 {
30 totalBytesRead += bytesRead;
31
32 if (downloadFileProgress != null) downloadFileProgress(totalBytes, totalBytesRead);
33
34 fileStream.Write(buf, 0, bytesRead);
35
36 bytesRead = _respStream.Read(buf, 0, buf.Length);
37 }
38
39 if (downloadFileCompleted != null) downloadFileCompleted();
40
41 return true;
42 }
43 catch (WebException ex)
44 {
45 //.....
46 }
47 finally
48 {
49 fileStream.Close();
50 _respStream.Close();
51 }
52 }
53 else ...
54 }
mentre il codice per eseguire l'upload, potrebbe essere del tipo:
1 if (Connect(remoteFilePath))
2 {
3 try
4 {
5 //Connected
6 _conn.Method = WebRequestMethods.Ftp.UploadFile;
7
8 FileInfo file = new FileInfo(localFilePath);
9
10 if (file.Length > 0)
11 {
12 if (uploadFileStarted != null) uploadFileStarted(file.Length);
13
14 Stream strUpload = _conn.GetRequestStream();
15
16 int bytesRead = 0;
17 int totalBytesRead = 0;
18 byte[] fileBytes = new byte[1024];
19
20 FileStream strLocalFile = new FileStream(localFilePath, FileMode.Open);
21 bytesRead = strLocalFile.Read(fileBytes, 0, fileBytes.Length);
22
23 while (bytesRead != 0)
24 {
25 totalBytesRead += bytesRead;
26
27 strUpload.Write(fileBytes, 0, bytesRead);
28
29 if (uploadFileProgress != null) uploadFileProgress(file.Length, totalBytesRead);
30
31 bytesRead = strLocalFile.Read(fileBytes, 0, fileBytes.Length);
32 }
33
34 strLocalFile.Close();
35 strUpload.Close();
36
37 if (uploadFileCompleted != null) uploadFileCompleted();
38 }
39 }
40 catch (WebException ex) {...}
41 catch (Exception ex) { ...}
42 }
43 else{...}
Nulla di particolare, tranne che, sia per l'upload che per il download, il file viene inviato/scaricato un blocco per volta, nell'esempio di dimensione massima di 1024 Byte.
In allegato, un'applicazione Windows Form molto semplice.
Le operazioni di download/upload sono eseguite su un thread diverso da quello principale.
Codice allegato