Grabar cd

¿Cómo puedo grabar archivos en un cd con visual basic?.

4 respuestas

Respuesta
1
Bueno a decir verdad no se puede, lo que puedes hacer es crear un botón que te llame al ejecutable de tu grabador nero por ejemplo...
Para hacer eso podrías poner esto:
Botón Grabar
Shell("calc.exe") ' esto te llama a la calculadora
'Dentro de las comillas tiene que ir la ruta del ejecutable de tu grabador, y nada mas  entiendes
Respuesta
1
Hol apuedes hacer uso de la librería nercom.dll, aquí te muestro un articulo publicado por un colegilla
Bueno, pues vamos a ello... la grabación de CDs y DVDs en VB6 es un hecho que, si bien antes era complicado de efectuar, hoy en día ya se disponen de librerías compiladas muy testeadas y de mucha reputación, como a nercom.dll de Nero.
Vamos con el ejemplo que te expongo, con el que seguro verificarás cómo se graba, más en concreto la pregunta a la que haces referencia, esto es, cómo grabar un directorio...
Necesitamos abrir un nuevo proyecto EXE al que llamaremos GrabaCD por ejemplo con un sencillo formulario que conste de una etiqueta, la cual tendrá el nombre de LblProgreso.
A continuación sigue el código en Visual Basic que el formulario contiene, tan sólo tienes que hacer copia-pega y compilarlo (no debe generar errores).
Una vez compilado tendrás que invocar desde la línea de comandos al archivo "exe" generado con dos argumentos; la ruta del directorio a partir del cual quieres grabar todo lo que contenga en un cd y la etiqueta de volumen de ese CD : C: uta donde tengáis el ejecutable>GrabaCD.exe C:\Documents and Settings BackUpCDoc (se usa como un programa de linea de comandos normal) y si los argumentos son correctos te aparecerá el formulario con la etiqueta, mostrándote el progreso de grabación, por último se abrirá la bandeja de la grabadora y te saldrá un mensaje.
No te olvides de meter un CD virgen antes de ejecutar la aplicación, si no lo haces se abrirá la bandeja invitándote a meter el CD :-).
'Se declaran las variables del formulario , públicas a todas las funciones y procedimientos
Dim FSOImagen As FileSystemObject
Dim WithEvents MiNero As Nero
Dim PistaISONero As NeroISOTrack
Dim Dispositivos As INeroDrives
Dim WithEvents Grabadora As NeroDrive
Private Sub Form_Initialize()
Set FSOImagen = New FileSystemObject
Set MiNero = New Nero
Set PistaISONero = New NeroISOTrack
Set Dispositivos = MiNero.GetDrives(NERO_MEDIA_CD)
'Aqui se establece la unidad correcta (la grabadora de CDs en mi caso es la 1)
'Puedes averigüar que dispositivo es la grabadora mirando en las propiedades de Dispositivos.
'Dispositivos(numDispositivo).DeviceName por ejemplo sería una buena pista.
Set Grabadora = Dispositivos(1)
Call RealizarGrabacion
End Sub
'Cuando se descargue el formulario, al terminar la aplicación destruiremos los objetos creados
'globalmente.
Private Sub Form_Terminate()
Set Grabadora = Nothing
Set Dispositivos = Nothing
Set PistaISONero = Nothing
Set MiNero = Nothing
Set FSOImagen = Nothing
End Sub
Private Sub RealizarGrabacion()
Dim NombreDirectorioRaiz As String
Dim EtiquetaCD As String
Call InterpretarArgumentos(NombreDirectorioRaiz, EtiquetaCD)
Call CrearImagenCD(NombreDirectorioRaiz, EtiquetaCD)
Call GrabarImagenCD
Unload Me
End Sub
'Este procedimiento interpreta los argumentos que se pasan al ejecutar el programa desde la
'línea de argumentos y guarda dichos argumentos (solo necesitamos uno o dos) en las variables
'que le pasamos como parámetros por referencia.
Private Sub InterpretarArgumentos(ByRef RutaDirectorioOrigen As String ,ByRef EtiquetaCD As String)
Dim ArrayArgumentos() As String
If Command$ = "" Then
MsgBox "No se han pasado argumentos al programa"
Else
'La instruccion Split es una maravilla.
ArrayArgumentos = Split(Command$, " ")
RutaDirectorioOrigen = ArrayArgumentos(0)
EtiquetaCD = ArrayArgumentos(1)
'El segundo argumento es opcional , en caso de que no se pase se utiliza por ejemplo la fecha
'como etiqueta de volumen.
If EtiquetaCD = "" Then
EtiquetaCD = Date
End If
End If
End Sub
'Este procedimiento crea la "imagen" del CD a partir de los archivos y subdirectorios que
'cuelgan del directorio inicial que le especifiquemos
'Con lo cual todos los archivos y subdirectorios de ese directorio origen que está en el disco
'duro o en otro dispositivo de almacenamiento se grabaran a partir del directorio raiz del cd.
Public Sub CrearImagenCD(ByVal RutaDirectorioOrigen As String , ByVal EtiquetaCD As String)
Dim Archivo As File
Dim DirectorioOrigen As Folder
Dim SubDirectorio As Folder
Dim ArchivoNero As NeroFile
Dim DirectorioRaizNero As NeroFolder
If RutaDirectorioOrigen "" Then
Set DirectorioOrigen = FSOImagen.GetFolder(RutaDirectorioOrigen)
'Se crea primero el directorio raiz del CD.
Set DirectorioRaizNero = New NeroFolder
'He preferido añadir primero los archivos a la imagen del cd y luego ir uno a uno añadiendo los
'directorios que directamente cuelgan del directorio origen o inicial.
'La razón de todo esto es por seguir un orden y para realizar en un futuro un control sobre el
'tamaño de todo lo que se quiere ir metiendo en el CD , asi se sumarian los tamaños de los
'archivos y directorios que vayamos añadiendo , teniendo cuidado de no sobrepasar la capacidad del CD.
'Una vez creado el directorio raiz del CD se le añaden primero los archivos.
For Each Archivo In DirectorioOrigen.Files
Set ArchivoNero = New NeroFile
ArchivoNero.Name = Archivo.Name
ArchivoNero.SourceFilePath = Archivo.Path
DirectorioRaizNero.Files.Add ArchivoNero
Next Archivo
'Se añaden despues todos los directorios que cuelgan del directorio raiz del cd
'con sus respectivos subdirectorios al nero folder , mediante una llamada a AñadirDirectorio
'Añadir directorio de forma recursiva ira añadiendo los subdirectorios de los directorios que
'cuelgan directamente del directorio origen o inicial
For Each SubDirectorio In DirectorioOrigen.SubFolders
DirectorioRaizNero.Folders.Add AnadirDirectorio(SubDirectorio)
Next SubDirectorio
'Se establecen los valores para la Pista ISO del CD
PistaISONero.Name = EtiquetaCD
PistaISONero.RootFolder = DirectorioRaizNero
PistaISONero.BurnOptions = NERO_BURN_OPTION_CREATE_ISO_FS + NERO_BURN_OPTION_RELAX_JOLIET
Else
MsgBox "No se ha especificado una ruta válida para el directorio origen", vbInformation
End If
End Sub
'Esta funcion devuelve un Directorio NeroFolder. Esto hace fácil añadir el árbol de
'directorioscompleto a un Directorio NeroFolder existente.
Public Function AnadirDirectorio(ByVal Dir As Folder) As NeroFolder
Dim Archivo As File
Dim Directorio As Folder
Dim ArchivoNero As NeroFile
Dim DirectorioNero As NeroFolder
'Se crea un nuevo Directorio NeroFolder y se renombra.
Set DirectorioNero = New NeroFolder
DirectorioNero.Name = Dir.Name
'Se añaden todos los archivos al directorio nero folder
For Each Archivo In Dir.Files
Set ArchivoNero = New NeroFile
ArchivoNero.Name = Archivo.Name
ArchivoNero.SourceFilePath = Archivo.Path
DirectorioNero.Files.Add ArchivoNero
Next
'Se añaden todos los directorios al nero folder , mediante llamadas recursivas
For Each Directorio In Dir.SubFolders
DirectorioNero.Folders.Add AnadirDirectorio(Directorio)
Next
'Se devuelve finalmente este directorio.
Set AnadirDirectorio = DirectorioNero
End Function
'Este procedimiento es el que finalmente graba el CD.
Private Sub GrabarImagenCD()
'Se graba el CD utilizando la pista generada por el procedimiento CrearImagenCD.
'Se especifican las opciones correspondientes a lo que queremos hacer , un CD de datos.
Grabadora.BurnIsoAudioCD "Artista", "Titulo", 0, PistaISONero, Nothing, Nothing, NERO_BURN_FLAG_WRITE, 16, NERO_MEDIA_CD
End Sub
'Por último , implementamos los manejadores de dos de los eventos de la grabadora.
Private Sub Grabadora_OnProgress(ProgressInPercent As Long, Abort As Boolean)
Me.LblProgreso.Caption = ProgressInPercent & "%"
End Sub
Private Sub Grabadora_OnDoneBurn(StatusCode As NEROLib.NERO_BURN_ERROR)
MsgBox "CD Grabado", vbInformation
End Sub
Este programa se basa en la utilización del Scripting Runtime y cómo no en la librería de Nero ; por lo tanto hay que hacer referencia en el proyecto a dos librerías de enlace dinámico ; (En el menu Proyecto/Referencias) hay que seleccionar Microsoft scripting Runtime y Nero Type Library.
Importante:La librería en cuestión (Nero Type Library - NeroCom.dll), cuya versión 1.0 viene con la versión 5 de Nero y la 1.3 viene con la versión 6, funcionará solo si se tiene instalada la correspondiente versión de Nero.
Una versión reducida (Nero express) está disponible en la web de Nero y permite el uso de la librería NeroCom.dll, con lo cual no creo que haya ningún problema en desarrollar programas basados en esta tecnología para uso personal. Para uso comercial habría que adquirir la licencia de Nero.
Se ha utilizado un pequeño formulario y los eventos del objeto grabadora OnProgress (para ir mostrando el progreso de alguna manera) y OnDoneBurn para también de alguna manera avisar cuando se ha acabado de grabar, aunque de manera automática se abre la bandeja de la grabadora.
Hay que recalcar que el proceso de grabación se ejecuta en un hilo aparte, con lo cual mientras la librería graba la imagen del cd, se continuaría ejecutando otras posibles instrucciones del programa.
Si investigas los eventos de los objetos Grabadora y MiNero junto con la gran cantidad de propiedades de los dispositivos y opciones de grabación te podrás hacer una idea de la funcionalidad que tiene la librería.
(Articulo original de WIZARD)
Bueno el código es bueno funciona, si quieres alguna aclaración del mismo no dudes en escribir.
El código es muy interesante pero ¿cómo puedo hacerlo para que siempre grabe los archivos de una misma carpeta en el cd pulsando un botón del formulario?. No entiendo la manera de decirle que grabe unos determinados archivos. Gracias por tu ayuda.
Ok mira ahora estoy algo ocupado pero para la tarde te tengo el código más simple y preparado para grabar de una ruta especifica con solo presionar un botón.
Gracias por tu ayuda. Espero tu código. Gracias otra vez.
Hola. Me dijiste que me enviarías un código más sencillo para grabar CD. Gracias por tu colaboración. Estoy a la espera.
Primero vamos a ver los requerimientos:
1.- Necesitas la librerial NeroCom.dll que se instala con Nero 5 y 6 el website de Nero encontrás una version express gratuita lña cual instalara estas librerías y sino siempre esta el buen emule "Nero 6" así lo busque yo hay una verision que pesa 30MB luego e importante que instales el Nero en cualquiera de estas versiones 5 o 6 ya que solo copiando y regiostrando la libreira NeroComn.dll no funcionará.
2.- Luego hacer referencia a Microsoft Scripting Run Time y Nero 1.x Type Library
3.- Luego identificar cual es el numero de tu dispositivo de grabación
la parte para especificar el mismo directorio siempre es seteando la variable RutaDirectorioOrigen
si tienes dudas coméntamelas, o para enviarte el proyecto.
[email protected]
Gracias por tu ayuda. Lo que no veo claro es el tema de la linea de comandos. La idea es que pulsando un botón se copiara en un CD la información de una determinada carpeta (Siempre de la misma carpeta), por lo que poniendo una ruta fija, me serviría. ¿Cómo puedo darle la ruta?.
Gracias por tu ayuda.
Toni
Claro es que que si deseas usar la linea de comandos es decir abrir por ejemplo una consola de DOS o desde la ventana ejecutar harías algo como esto: grabar "c:\carpeta\default", "NombreCD" y cambiándole el nombre a la variable que te indico seria si lo haces desde un entorno visual como el formulario y de allí por ejemplo desde un botón podrías invocar a la rutina que graba el cd allí podrías aprovechar el cambiar el valor de la variable que almacena la ruta (podrías usar un textbox con que almacene la ruta o asignarla con un commondialog), de otra forma la esperara desde la linea de comandos a través de "command$" al cual se hace referencia dos veces en el code si te fijas y de el se extrae (split) la ruta y nombre del Cd que se envían desde la ventana ejecutar o consolade DOS. Por tanto de acuerdo al aforma en que desesees trabajar quitaras algunas lineas de código o las aumentaras.
Atentamente. Codeboy
Respuesta
1
Nunca se me ha ocurrido, la verdad. Mira a ver en este link:
http://foros.softonic.com/showthread.phtml?t=5258
Me dices si te sirve.
Respuesta
1
Te cito algo he visto que he visto en internet. Yo lo he entendido casi del todo, así que mejor que explicarlo con mis palabras y confundirte prefiero que lo leas tú directamente. Como podrás ver no es nada del otro mundo, pero hay que hacer uno antes para saber todos los pasos. Yo lo he hecho, pero lo he entendido:
Bueno, pues vamos a ello... la grabación de CDs y DVDs en VB6 es un hecho que, si bien antes era complicado de efectuar, hoy en día ya se disponen de librerías compiladas muy testeadas y de mucha reputación, como a la que haces referencia de Nero.
Vamos con el ejemplo que te expongo, con el que seguro verificarás cómo se graba, más en concreto la pregunta a la que haces referencia, esto es, cómo grabar un directorio...
Necesitamos abrir un nuevo proyecto EXE al que llamaremos GrabaCD por ejemplo con un sencillo formulario que conste de una etiqueta, la cual tendrá el nombre de LblProgreso.
A continuación sigue el código en Visual Basic que el formulario contiene, tan sólo tienes que hacer copia-pega y compilarlo (no debe generar errores).
Una vez compilado tendrás que invocar desde la línea de comandos al archivo "exe" generado con dos argumentos; la ruta del directorio a partir del cual quieres grabar todo lo que contenga en un cd y la etiqueta de volumen de ese CD : C:
Uta donde tengáis el ejecutable>GrabaCD.exe C:\Documents and Settings BackUpCDoc (se usa como un programa de linea de comandos normal) y si los argumentos son correctos te aparecerá el formulario con la etiqueta, mostrándote el progreso de grabación, por último se abrirá la bandeja de la grabadora y te saldrá un mensaje.
No te olvides de meter un CD virgen antes de ejecutar la aplicación, si no lo haces se abrirá la bandeja invitándote a meter el CD :-).
Cita:
'Se declaran las variables del formulario , públicas a todas las funciones y procedimientos
Dim FSOImagen As FileSystemObject
Dim WithEvents MiNero As Nero
Dim PistaISONero As NeroISOTrack
Dim Dispositivos As INeroDrives
Dim WithEvents Grabadora As NeroDrive
Private Sub Form_Initialize()
Set FSOImagen = New FileSystemObject
Set MiNero = New Nero
Set PistaISONero = New NeroISOTrack
Set Dispositivos = MiNero.GetDrives(NERO_MEDIA_CD)
'Aqui se establece la unidad correcta (la grabadora de CDs en mi caso es la 1)
'Puedes averigüar que dispositivo es la grabadora mirando en las propiedades de Dispositivos.
'Dispositivos(numDispositivo).DeviceName por ejemplo sería una buena pista.
Set Grabadora = Dispositivos(1)
Call RealizarGrabacion
End Sub
'Cuando se descargue el formulario, al terminar la aplicación destruiremos los objetos creados
'globalmente.
Private Sub Form_Terminate()
Set Grabadora = Nothing
Set Dispositivos = Nothing
Set PistaISONero = Nothing
Set MiNero = Nothing
Set FSOImagen = Nothing
End Sub
Private Sub RealizarGrabacion()
Dim NombreDirectorioRaiz As String
Dim EtiquetaCD As String
Call InterpretarArgumentos(NombreDirectorioRaiz, EtiquetaCD)
Call CrearImagenCD(NombreDirectorioRaiz, EtiquetaCD)
Call GrabarImagenCD
Unload Me
End Sub
'Este procedimiento interpreta los argumentos que se pasan al ejecutar el programa desde la
'línea de argumentos y guarda dichos argumentos (solo necesitamos uno o dos) en las variables
'que le pasamos como parámetros por referencia.
Private Sub InterpretarArgumentos(ByRef RutaDirectorioOrigen As String ,ByRef EtiquetaCD As String)
Dim ArrayArgumentos() As String
If Command$ = "" Then
MsgBox "No se han pasado argumentos al programa"
Else
'La instruccion Split es una maravilla.
ArrayArgumentos = Split(Command$, " ")
RutaDirectorioOrigen = ArrayArgumentos(0)
EtiquetaCD = ArrayArgumentos(1)
'El segundo argumento es opcional , en caso de que no se pase se utiliza por ejemplo la fecha
'como etiqueta de volumen.
If EtiquetaCD = "" Then
EtiquetaCD = Date
End If
End If
End Sub
'Este procedimiento crea la "imagen" del CD a partir de los archivos y subdirectorios que
'cuelgan del directorio inicial que le especifiquemos
'Con lo cual todos los archivos y subdirectorios de ese directorio origen que está en el disco
'duro o en otro dispositivo de almacenamiento se grabaran a partir del directorio raiz del cd.
Public Sub CrearImagenCD(ByVal RutaDirectorioOrigen As String , ByVal EtiquetaCD As String)
Dim Archivo As File
Dim DirectorioOrigen As Folder
Dim SubDirectorio As Folder
Dim ArchivoNero As NeroFile
Dim DirectorioRaizNero As NeroFolder
If RutaDirectorioOrigen "" Then
Set DirectorioOrigen = FSOImagen.GetFolder(RutaDirectorioOrigen)
'Se crea primero el directorio raiz del CD.
Set DirectorioRaizNero = New NeroFolder
'He preferido añadir primero los archivos a la imagen del cd y luego ir uno a uno añadiendo los
'directorios que directamente cuelgan del directorio origen o inicial.
'La razón de todo esto es por seguir un orden y para realizar en un futuro un control sobre el
'tamaño de todo lo que se quiere ir metiendo en el CD , asi se sumarian los tamaños de los
'archivos y directorios que vayamos añadiendo , teniendo cuidado de no sobrepasar la capacidad del CD.
'Una vez creado el directorio raiz del CD se le añaden primero los archivos.
For Each Archivo In DirectorioOrigen.Files
Set ArchivoNero = New NeroFile
ArchivoNero.Name = Archivo.Name
ArchivoNero.SourceFilePath = Archivo.Path
DirectorioRaizNero.Files.Add ArchivoNero
Next Archivo
'Se añaden despues todos los directorios que cuelgan del directorio raiz del cd
'con sus respectivos subdirectorios al nero folder , mediante una llamada a AñadirDirectorio
'Añadir directorio de forma recursiva ira añadiendo los subdirectorios de los directorios que
'cuelgan directamente del directorio origen o inicial
For Each SubDirectorio In DirectorioOrigen.SubFolders
DirectorioRaizNero.Folders.Add AnadirDirectorio(SubDirectorio)
Next SubDirectorio
'Se establecen los valores para la Pista ISO del CD
PistaISONero.Name = EtiquetaCD
PistaISONero.RootFolder = DirectorioRaizNero
PistaISONero.BurnOptions = NERO_BURN_OPTION_CREATE_ISO_FS + NERO_BURN_OPTION_RELAX_JOLIET
Else
MsgBox "No se ha especificado una ruta válida para el directorio origen", vbInformation
End If
End Sub
'Esta funcion devuelve un Directorio NeroFolder. Esto hace fácil añadir el árbol de
'directorioscompleto a un Directorio NeroFolder existente.
Public Function AnadirDirectorio(ByVal Dir As Folder) As NeroFolder
Dim Archivo As File
Dim Directorio As Folder
Dim ArchivoNero As NeroFile
Dim DirectorioNero As NeroFolder
'Se crea un nuevo Directorio NeroFolder y se renombra.
Set DirectorioNero = New NeroFolder
DirectorioNero.Name = Dir.Name
'Se añaden todos los archivos al directorio nero folder
For Each Archivo In Dir.Files
Set ArchivoNero = New NeroFile
ArchivoNero.Name = Archivo.Name
ArchivoNero.SourceFilePath = Archivo.Path
DirectorioNero.Files.Add ArchivoNero
Next
'Se añaden todos los directorios al nero folder , mediante llamadas recursivas
For Each Directorio In Dir.SubFolders
DirectorioNero.Folders.Add AnadirDirectorio(Directorio)
Next
'Se devuelve finalmente este directorio.
Set AnadirDirectorio = DirectorioNero
End Function
'Este procedimiento es el que finalmente graba el CD.
Private Sub GrabarImagenCD()
'Se graba el CD utilizando la pista generada por el procedimiento CrearImagenCD.
'Se especifican las opciones correspondientes a lo que queremos hacer , un CD de datos.
Grabadora.BurnIsoAudioCD "Artista", "Titulo", 0, PistaISONero, Nothing, Nothing, NERO_BURN_FLAG_WRITE, 16, NERO_MEDIA_CD
End Sub
'Por último , implementamos los manejadores de dos de los eventos de la grabadora.
Private Sub Grabadora_OnProgress(ProgressInPercent As Long, Abort As Boolean)
Me.LblProgreso.Caption = ProgressInPercent & "%"
End Sub
Private Sub Grabadora_OnDoneBurn(StatusCode As NEROLib.NERO_BURN_ERROR)
MsgBox "CD Grabado", vbInformation
End Sub
Este programa se basa en la utilización del Scripting Runtime y cómo no en la librería de Nero ; por lo tanto hay que hacer referencia en el proyecto a dos librerías de enlace dinámico ; (En el menu Proyecto/Referencias) hay que seleccionar Microsoft scripting Runtime y Nero Type Library.
Importante:La librería en cuestión (Nero Type Library - NeroCom.dll), cuya versión 1.0 viene con la versión 5 de Nero y la 1.3 viene con la versión 6, funcionará solo si se tiene instalada la correspondiente versión de Nero.
Una versión reducida (Nero express) está disponible en la web de Nero y permite el uso de la librería NeroCom.dll, con lo cual no creo que haya ningún problema en desarrollar programas basados en esta tecnología para uso personal. Para uso comercial habría que adquirir la licencia de Nero.
Se ha utilizado un pequeño formulario y los eventos del objeto grabadora OnProgress (para ir mostrando el progreso de alguna manera) y OnDoneBurn para también de alguna manera avisar cuando se ha acabado de grabar, aunque de manera automática se abre la bandeja de la grabadora.
Hay que recalcar que el proceso de grabación se ejecuta en un hilo aparte, con lo cual mientras la librería graba la imagen del cd, se continuaría ejecutando otras posibles instrucciones del programa.
Si investigas los eventos de los objetos Grabadora y MiNero junto con la gran cantidad de propiedades de los dispositivos y opciones de grabación te podrás hacer una idea de la funcionalidad que tiene la librería.

Añade tu respuesta

Haz clic para o

Más respuestas relacionadas