Sunteți pe pagina 1din 13

TUTORIALATUTOPLAYMEDIASTUDIO7 TEMA:Unidadesdealmacenamiento.

Autor:Jdyb

En este tutorial lo que vamos a hacer es trabajar un poco con las unidades de almacenamiento para conocer ms sus detalles, para ello tengopreparadosdosqueyatengopreparados.

Lo primero que hemos de hacer es crearnos un proyecto como hacemossiempre.

Yluegoloquehacemosescrearnosunbotnquepermitaalusuario seleccionar la unidad que l desee, para esto lo haremos como siempre con un Dialog.FolderBrowse, pero ahora hay que acordarse de que cuando se programa siempre tenemos que gestionar excepciones, ya que pueden surgir errores en el programa o que el usuario sea un poco torpe. Pues bien en este caso la excepcin est muy clara no?, Qu pasara si el usuario no selecciona una unidad y selecciona una carpeta?; pues en esta caso no es que sea algo grave, simplemente lo que vayamos a copiar no se copiar don queremos que se copie que es en la raz del disco.Peroenotroscasosunatonteracomoestapuedeocasionarqueno tengamos ni las ms remota idea de lo que va a hacer el programa, al ordenador hay que darle todo hecho y gestionar todas las posibles opciones, recordemos que un ordenador no es ms que un tonto que realizamillonesdeoperacionesporsegundo. Qu hacemos para evitar que el usuario seleccione una cosa que noseaunaunidaddedisco(laraz)? Pues bien, este caso es muy fcil, lo que tenemos que hacer es fijarnos en que Dialog.FolderBrowse nos devuelve una cadena de caracteres con la ruta seleccionada, qu diferencia habr entre que seleccione una unidad o una carpeta?, pues que la cadena de caracteres ser ms larga o ms corta en concreto si slo se selecciona una unidad la cadenatendrunalongituddetrescaracteres(C:\),porlotanto,enque nos fijaremos para gestionar excepciones? Pues en la longitud de la cadenadecaracteres. Una vez explicado en que me voy a basar lo que hago es describir todo el proceso para pasar todo lo que he dicho a cdigo ejecutable (primeropensar,despusprogramar). Lo primero hemos de crear un botn, en el que al hacer click se ejecutetodonuestrocdigo.

Luego entramos en las propiedades del botn, en concreto en la seccindescriptsynossituamosenlapestaaOnclick.

Antes de nada nos creamos una variable booleana a la que yo he llamadovalido,ylainicializamosafalse(falso). Luego lo que vamos a hacer es un bucle para que hasta que el usuario no cancele o no elija una opcin correcta (una unidad y no una carpeta) le siga preguntando por la unidad de disco. En bucle se repetir siempremientasvalidoseafalse. Dentro del bucle lo que tendremos es el Dialog.FolderBrowse y los sucesivos if en los que se ir comprobando diferentes cosas para evitar que sucedan errores, entre las cosas a comprobar se encuentra comprobar la longitud de la cadena para ver si ha seleccionada una unidad o una carpeta. Segn lo que suceda dentro de cada uno de los if se darn mensajes al usuario y se ejecutarn lascorrespondientesacciones,aqu pongocomoquedara,despuspongo el cdigo y ya les explico el porqu de cada cosa para que quede todo entendido.

Ahoraelcdigo.
valido=false; while (valido==false) do ruta = Dialog.FolderBrowse("Seleccione una unidad", "MiPC"); long = String.Length(ruta); if ruta=="CANCEL" then result = Dialog.Message("Error", "Accin usuario", MB_OK, MB_ICONEXCLAMATION, MB_DEFBUTTON1); break; end if long==3 then valido=true; end if long~=3 then result = Dialog.Message("Error", "La ruta escogida no es una unidad de disco", MB_OK, MB_ICONEXCLAMATION, MB_DEFBUTTON1); end end cancelada por el

Ahoraprocedoaexplicartodoelcdigo.

Lo primero que he hecho es usar un bucle while, y la condicin para que se repita es que valido sea igual a false, haciendo esto me aseguro que lo que se encuentra dentro del bucle se va a repetir siempre mientrassecumplaesacondicin. Pasemos a ver lo que hay dentro del bucle; lo primero que tenemos es el Dialog.FolderBrowse que guarda en la variable ruta, la ruta que ha escogido el usuario. Despus tenemos la funcin String.Length que lo que hace es guardar en la variable long la longituddelacadenaalmacenadaenruta. Despus de esto ya nos encontramos con las estructuras condicionalesoif,quelasusamosparacomprobardiferentescosas. En la primera comprobamos si la variable ruta es igual a la cadena CANCEL que significa que el usuario ha presionado el botn de cancelar (ver ayuda del Autoplay Media Studio), entonces lo que se hace es dar un aviso al usuario mediante un mensaje de que ha cancelado la accin y despusnosencontramosconlapalabrareservadabreak, estapalabra reservada lo que hace es que se termine el bucle, que se deje de ejecutar, ni siquiera se seguira ejecutando el resto de los if que podemos ver a continuacin,saldradelbucleyseguiraejecutandoloqueseencuentrea continuacin y que est fuera de ese bucle (digamos que es una forma rpida de salir del bucle). Despus finaliza la estructura condicional, en resumen,sisepresionaelbotncancelarlaaplicacinyanolepreguntaal usuarioporlaruta. Despus lo que tenemos es otra estructura condicional que lo que compruebaessilavariablelong (longituddelacadenadecaracteres)es 3, lo que significa (como ya dijimos antes) que el usuario ha elegido la opcin correcta (elegir slo una unidad). Si se cumple la condicin lo que hace la aplicacin es poner valido a true, y con esto la prxima vez que fuera a repetir el bucle ya no se repetira ya que ya no se cumple la condicinderepeticin.

La siguiente y ltima estructura condicional que tenemos lo que hace es comprobar si valido es distinto de 3, lo que significara que el usuarionohaelegidounaopcincorrecta,alentrarenelif, sedaraun mensaje de error al usuario y no se modificara nada, por lo que valido seguira siendo false ya que no se ha modificado entonces la siguiente vez que se fuera a repetir el bucle como la condicin de repeticin se cumple el bucle se seguira ejecutando y as sucesivamente hasta que se eligieralaopcincorrecta. En resumen el bucle nunca va a parar hasta que no se seleccione la opcincorrectaosepresioneelbotncancelar. Para terminar decir que la unidad que ha escogido el usuario se encuentraenlavariableruta. Una vez que ya nos hemos asegurado de que el usuario no puede elegir ms que una unidad de disco y nada ms (ninguna carpeta) ya podemos trabajar con esa unidad. Para ello veremos un ejemplo de cmo trabajarconella. En el ejemplo lo que vamos a hacer va a ser como saber el espacio disponible, total o usado de una unidad de disco, esto es muy til sobre todo cuando tratamos de copiar archivos y cosas por el estilo para evitar archivoscorruptosoerroresenlacopiadearchivos. Lo podemos hacer de dos formas, una de ella sera aadiendo el correspondientecdigoenbuclequevimosantesenelmismositiodonde sedicequevalidoseatrue;laotraformaserahacerlofueradelbucle con un if que comprueba si valido es igual a true. El cdigo va a ser el mismo, cuando est terminado os lo voy a poner de las dos formas para que veis las dos y vosotros elegs cual queris, el resultado va a ser el mismo,lonicoquecambiaraseralaformadeescribirlo.

Lo que vamos a hacer en el ejemplo es un supuesto caso de que queramos copiar todo el CD donde se encuentra el autoplay a la raz de

otra unidad, que podra ser un pendrive (el tema de la copia no lo implementar ya que ya hice un tutorial sobre el manejo de archivos, dejar comentado dnde debera de efectuarse la copia de archivos/carpetas). Para la realizacin de todas estas tareas nos vamos a servir de las funcionesdelacategoradrive,quepodemosencontrarenelprogama.

Lo primero que tendremos que saber es el espacio que queremos copiar, por lo que necesitamos saber cunto espacio hay ocupado de nuestro CD; para ello lo que hemos de hacer es usar la funcin Drive.GetUsedSpace, que la podemos ver en el cuadro que os he puesto, lo que debemos de hacer es seleccionar la unidad que queremos comprobarelespaciodisponible.

En la primera lnea hemos puesto _SourceDrive, que significa la unidad de medios que es el CD, hemos puesto eso en vez de la letra de la unidad porque nunca sabremos la letra de la unidad en todos los ordenadores,porloquedejamosqueelprogramaseencarguedeello. En la segunda lnea simplemente ponemos la variable en la que se almacenarelespaciodisponibleenMb. Despus lo que tendremos que saber es el espacio libre que hay en la unidad a la que se quieren copiar los archivos. Para ello usaremos otra funcindelamismacategoraqueesDrive.GetFreeSpace,parausarlaslo tenemosqueespecificarlavariableen la queseguardaelespaciolibreen Mb y la unidad de la que queremos conocer su espacio libre (que es la cadenadecaracteresruta,quelepedimosalusuarioenlaprimeraparte deltutorial(launidadqueeligi).

Con estas dos cosas ya estaramos en disposicin de hacer las correspondientes comprobaciones comparando el espacio necesario y el espaciolibreytambinselepuedemostraralusuariounpequeocuadro resumenconlasdoscifras.

Ahoraospongotodoelcdigocomolohehechoyoyosloexplico.
valido=false; while (valido==false) do ruta = Dialog.FolderBrowse("Seleccione una unidad", "MiPC"); long = String.Length(ruta); if ruta=="CANCEL" then result = Dialog.Message("Error", "Accin usuario", MB_OK, MB_ICONEXCLAMATION, MB_DEFBUTTON1); break; end if long==3 then valido=true; esp_copiar=Drive.GetUsedSpace(_SourceDrive); esp_libre = Drive.GetFreeSpace(ruta); if esp_libre<esp_copiar then result = Dialog.Message("ERROR", "Se ha producido un error\n\nEspacio insuficiente", MB_OK, MB_ICONINFORMATION, MB_DEFBUTTON1); end cancelada por el

if esp_libre==esp_copiar or esp_libre>esp_copiar then result = Dialog.Message("Correcto", "Hay suficiente\n\nSe va a iniciar el proceso de copia", MB_ICONINFORMATION, MB_DEFBUTTON1); espacio MB_OK,

--sentencias correspondientes a la copia de archivos end end if long~=3 then result = Dialog.Message("Error", "La ruta escogida no es una unidad de disco", MB_OK, MB_ICONEXCLAMATION, MB_DEFBUTTON1); end end

Enestecasosehahechodentrodelbucle,lapartedecdigoquees nueva la he remarcado dentro del cuadro con un estilo de borde diferente. La forma de hacerlo fuera del bucle la pongo ahora para que veislasdosformas.

valido=false; while (valido==false) do ruta = Dialog.FolderBrowse("Seleccione una unidad", "MiPC"); long = String.Length(ruta); if ruta=="CANCEL" then result = Dialog.Message("Error", "Accin usuario", MB_OK, MB_ICONEXCLAMATION, MB_DEFBUTTON1); break; end if long==3 then valido=true; end if long~=3 then result = Dialog.Message("Error", "La ruta escogida no es una unidad de disco", MB_OK, MB_ICONEXCLAMATION, MB_DEFBUTTON1); end end if valido==true then esp_copiar=Drive.GetUsedSpace(_SourceDrive); esp_libre = Drive.GetFreeSpace(ruta); if esp_libre<esp_copiar then result = Dialog.Message("ERROR", "Se ha producido un error\n\nEspacio insuficiente", MB_OK, MB_ICONINFORMATION, MB_DEFBUTTON1); end cancelada por el

if esp_libre==esp_copiar or esp_libre>esp_copiar then result = Dialog.Message("Correcto", "Hay suficiente\n\nSe va a iniciar el proceso de copia", MB_ICONINFORMATION, MB_DEFBUTTON1); espacio MB_OK,

--sentencias correspondientes a la copia de archivos end end

He hecho lo mismo que antes, he puesto la parte nueva con un estilodelneadiferente.Ahorayapasoaexplicarlapartenueva.

Lo primero que se hace son las dos sentencias que ya expliqu antes,quesirvenparasacarelespacionecesarioyelespaciolibre. Despus lo que podemos ver son dos sentencias de control if que nos sirven para hacer las comprobaciones, la primera lo que hace es comprobar si el espacio libre es menor que el necesario, y si se cumple da un mensaje de error al usuario. En el segundo if se comprueba si el espacio libre es igual o mayor al necesario y si se cumple muestra un mensaje al usuario informando de que se va a iniciar la copia y debajo de eso es donde deberan ustedes poner las sentencias necesarias para la copiadearchivos. Si lo que quieren es copiar algo determinado y no la unidad entera pues lo que tienen que hacer es saber el espacio necesario para lo que quieren copiar en Mb con decimales y cambian la primera sentencia por algoparecidoaesto.Yelrestolodejanigual. esp_copiar=50,5; Para hacer un cuadro resumen que le muestre al usuario el espacio necesario y el espacio libre en la unidad antes de que se inicie el proceso de copia pues lo deberan colocar debajo de las dos sentencias primeras, demaneraquequedaraalgoas.

esp_copiar=Drive.GetUsedSpace(_SourceDrive); esp_libre = Drive.GetFreeSpace(ruta); Dialog_1="Espacio requerido--> "..esp_copiar.." Mb"; Dialog_2="Espacio libre en "..ruta.."--> "..esp_libre.." Mb"; Dialog_final=Dialog_1.."\n\n\n"..Dialog_2; result = Dialog.Message("Resumen", MB_ICONINFORMATION, MB_DEFBUTTON1); Dialog_final, MB_OK,

Pongo los puntos suspensivos arriba y abajo para no repetir todo el cdigo de nuevo, he puesto las dos primeras lneas y luego lo necesario pararepresentarenesecuadrodedilogounresumen. Lo explico; se trata de ir concatenando las cadenas, ya que la funcin de Dialog.Message slo est preparada para mostrar una cadena de caracteres y no varias. La forma de concatenar las cadenas es usandolosdospuntos(..)entrelascadenasaconcatenar. Bueno,comoveissetratadeusarlasfuncionesdelacategoradrive paraloquenecesitemosycomoveissonmuytilesparatemasdeespacio dealmacenamiento. Espero que los ejemplos hayan sido de utilidad y que hayan quedadoclaros,sisequedanconalgunadudanodudenenpreguntar. Bueno,estoestodo,sinmsmedespidohastaelprximotutorial. TutorialbyJdyb.

S-ar putea să vă placă și