Questo sito utilizza cookies solo per scopi di autenticazione sul sito e nient'altro. Nessuna informazione personale viene tracciata. Leggi l'informativa sui cookies.
Username: Password: oppure
C# / VB.NET - Rinominare file con numeri
Forum - C# / VB.NET - Rinominare file con numeri

Avatar
dttah (Normal User)
Rookie


Messaggi: 26
Iscritto: 30/01/2007

Segnala al moderatore
Postato alle 12:33
Venerdì, 25/07/2008
Ho un programma che scatta screenshot a ripetizione. E ho fatto in modo che li rinomini in maniera random (asdi42123.jpg e simili) . Però vorrei che invece seguissero un ordine logico (1.jpg , 2.jpg , 3.jpg). Ovvero
If file.exist(path)
File.rename
il problema e che se esiste anche il secondo deve fare di nuovo la stessa cosa allora ho pensato ad un do loop solo che mi sto incasinando...

        Dim lol As String = My.Computer.FileSystem.SpecialDirectories.MyPictures
        Dim s As String = DateTime.Today.ToString("dd-MM-yyy")
        Dim num1 As String
        Dim ext As String = ".jpg"
        Dim path As String = My.Computer.FileSystem.SpecialDirectories.MyPictures + "\autoscr\" + s

aiutatemi O_O

Ultima modifica effettuata da dttah il 25/07/2008 alle 14:38
PM Quote
Avatar
pcprogrammer (Ex-Member)
Rookie


Messaggi: 30
Iscritto: 04/06/2008

Segnala al moderatore
Postato alle 16:21
Venerdì, 25/07/2008
io sono programmatrice (femmina) di C#, ma me la cavicchio anche in VB.NET, guarda se questo codice aggiunto al tuo può aiutarti:

Dim numeroFoto As Integer = 0
While File.Exist(path) = False
    numeroFoto += 1
End While

se non dovesse funzionare o per dei chiarimenti mi trovi a questo indirizzo MSN:
pcprogrammer@hotmail.it

Ciao Ciao

PM Quote
Avatar
dttah (Normal User)
Rookie


Messaggi: 26
Iscritto: 30/01/2007

Segnala al moderatore
Postato alle 20:40
Venerdì, 25/07/2008
Facendo in questo modo ( aggiungendo il codice che hai detto tu) mi si blocca il programma non so xkè non mi da manco l'eccezione.

Codice sorgente - presumibilmente VB.NET

  1. Private Sub Timer1_Tick(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Timer1.Tick
  2.         Dim lol As String
  3.         lol = My.Computer.FileSystem.SpecialDirectories.MyPictures
  4.         Dim s As String = DateTime.Today.ToString("dd-MM-yyy")
  5.  
  6.         Me.Opacity = 0
  7.  
  8.         Dim bounds As Rectangle
  9.  
  10.         Dim screenshot As Bitmap
  11.  
  12.         Dim graph As Graphics
  13.  
  14.         bounds = PictureBox1.Bounds
  15.  
  16.         screenshot = New Bitmap(bounds.Width, bounds.Height, Imaging.PixelFormat.Format32bppArgb)
  17.  
  18.         graph = Graphics.FromImage(screenshot)
  19.  
  20.         graph.CopyFromScreen(bounds.X, bounds.Y, 0, 0, bounds.Size, CopyPixelOperation.SourceCopy)
  21.         Dim numeroFoto As Integer = 0
  22.         Dim path As String = My.Computer.FileSystem.SpecialDirectories.MyPictures + "\autoscr\" + s
  23.         While File.Exists(path) = False
  24.             numeroFoto += 1
  25.         End While
  26.         screenshot.Save(lol & "\autoscr\" & s & "\" & numeroFoto & ".jpg")
  27.  
  28.  
  29.     End Sub



Il totem tu sei un pro aiutami T_T

Ultima modifica effettuata da dttah il 25/07/2008 alle 20:41
PM Quote
Avatar
pcprogrammer (Ex-Member)
Rookie


Messaggi: 30
Iscritto: 04/06/2008

Segnala al moderatore
Postato alle 20:49
Venerdì, 25/07/2008
non funziona perchè ti sei sbagliato, il mio codice non dovevi metterlo lì.
Contattami per msn: pcprogrammer@hotmail.it

se ci sentiamo ti metto a posto tutto io

PM Quote
Avatar
dttah (Normal User)
Rookie


Messaggi: 26
Iscritto: 30/01/2007

Segnala al moderatore
Postato alle 20:54
Venerdì, 25/07/2008
ti ho aggiunto sono
andreas_n .. ecc ecc

PM Quote
Avatar
Il Totem (Admin)
Guru^2


Messaggi: 3635
Iscritto: 24/01/2006

Segnala al moderatore
Postato alle 11:06
Sabato, 26/07/2008
Codice sorgente - presumibilmente VB.NET

  1. Private Sub Timer1_Tick(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Timer1.Tick
  2.   Dim lol As String
  3.   lol = My.Computer.FileSystem.SpecialDirectories.MyPictures
  4.   Dim s As String = DateTime.Today.ToString("dd-MM-yyy")
  5.  
  6.   Me.Opacity = 0
  7.  
  8.   Dim bounds As Rectangle
  9.   Dim screenshot As Bitmap
  10.   Dim graph As Graphics
  11.  
  12.   bounds = PictureBox1.Bounds
  13.   screenshot = New Bitmap(bounds.Width, bounds.Height, Imaging.PixelFormat.Format32bppArgb)
  14.   graph = Graphics.FromImage(screenshot)
  15.   graph.CopyFromScreen(bounds.X, bounds.Y, 0, 0, bounds.Size, CopyPixelOperation.SourceCopy)
  16.        
  17.   Static numeroFoto As Integer = 0
  18.   Dim path As String = lol + "\autoscr\" + s + "\"
  19.   Do
  20.     numeroFoto += 1
  21.   Loop While File.Exists(path & "\" & numeroFoto & ".jpg")
  22.   screenshot.Save(path & "\" & numeroFoto & ".jpg")
  23. End Sub


Questo codice dovrebbe andare. Anche quello di pcprogrammer era sbagliato. Infatti, tu vuoi dare un ordine alle foto che vengono generate, quindi devi incrementare numeroFoto ad ogni screenshot: questo si può fare con una variabile static, che mantiene il proprio valore tra un tick e l'altro. Con il ciclo Do, l'indice viene aumentato di 1 per proseguire nell'ordine, ma se il file con quel numero esiste, allora prosegue nell'aumentare finché non trova un numero non ancora occupato, e lo salva.

Il codice di pcprogrammer, invece, aumentava l'indice solo se il file NON esisteva. Quindi se il file fosse esistito, l'avrebbe sovrascritto. Inoltre, poichè numeroFoto non era dichiarata Static il procedimento veniva ripetuto ad ogni tick, col risultato che tutti gli screenshot sovrascrivevano il primo.

P.S.: File.Exists deve essere usato su file, e non su percorsi, quindi File.Exists(path) non è un uso valido.
P.P.S.: hai controllato che la cartella path esista prima di procedere?

Ultima modifica effettuata da Il Totem il 26/07/2008 alle 11:11
PM Quote
Avatar
dttah (Normal User)
Rookie


Messaggi: 26
Iscritto: 30/01/2007

Segnala al moderatore
Postato alle 13:23
Sabato, 26/07/2008
Totem sei un genio :D grazie dell'aiuto , avevo intuito che dovevo utilizzare un do loop ma non sapevo bene come strutturare il tutto. Senti un ultima cosa. Io avevo una combobox con dei numeri in millisecondi "10000" e volevo che praticamente il timer dipendesse dalla combobox (timer1.inteval).

Ho provato timer1.inteval = combobox.items ma mi dice questo:

Codice sorgente - presumibilmente C# / VB.NET

  1. Errore  1       Impossibile convertire il valore di tipo "System.Windows.Forms.ComboBox.ObjectCollection" in "Integer". C:\Documents and Settings\Andrea\Documenti\Visual Studio 2005\Projects\WindowsApplication1\WindowsApplication1\Form1.vb 44      27      WindowsApplication1



Mentre se provo a fare combobox1.text mi legge il testo che gli attribuisco da visual studio se lo cambio manualmente rimane ugualmente quel testo. Grazie di tutto :)

Ultima modifica effettuata da dttah il 26/07/2008 alle 13:24
PM Quote
Avatar
Mte90 (Member)
Guru


Messaggi: 1144
Iscritto: 25/03/2008

Segnala al moderatore
Postato alle 16:00
Sabato, 26/07/2008
l'items non è in formato string.
devi scrivere combox.items.tostring e se dà problemi eguagliare questo codice ad una varibabile integer.

PM Quote
Avatar
Il Totem (Admin)
Guru^2


Messaggi: 3635
Iscritto: 24/01/2006

Segnala al moderatore
Postato alle 9:57
Domenica, 27/07/2008
Items è una collezione: non può essere convertita in stringa. SelectedItem fornisce, invece, il valore dell'elemento selezionato:
Codice sorgente - presumibilmente Plain Text

  1. Timer1.Interval = ComboBox.SelectedItem.ToString


Ricordati di controllare se è selezionato qualcosa, prima.

PM Quote