//Verificar que los 5 directorios de guardado de los paths son validos y se puede escribir en ellos public bool verifyDirectories() { try { sqlCommands sql = new sqlCommands(); List <string> direcciones = sql.buscarDirGuardado(); string dirEnercom = direcciones[0]; string dirCatalogo = direcciones[1]; string dirUL = direcciones[2]; string dirTexto = direcciones[3]; string dirVarias = direcciones[4]; bool okEnercom = IsDirectoryWritable(dirEnercom); bool okCatalogo = IsDirectoryWritable(dirCatalogo); bool okUL = IsDirectoryWritable(dirUL); bool okTexto = IsDirectoryWritable(dirTexto); bool okVarias = IsDirectoryWritable(dirVarias); if (okEnercom && okCatalogo && okUL && okTexto && okVarias) { return(true); } else { return(false); } } catch (Exception ex) { MessageBox.Show("Ocurrio un problema al tratar de escribir en las direcciones de guardado de los archivos." + "Asegurarse que el usuario tiene los permisos requeridos para escribir en las carpetas de guardado. Error:\n" + ex.ToString()); return(false); } }
/// <summary> /// Valida el copiado y lo ejecuta. Si es null no ejecuta nada. Si no es null ejecuta el copiado del path existente al nuevo /// </summary> /// <param name="isNull">Si la textbox esta vacia</param> /// <param name="origen">El origen es el valor del origen de la textbox</param> /// <param name="direccion">El index de la list generada por buscarDirGuardado</param> /// <param name="id">El id del ultimo archivo recien agregado</param> public void validarCopiado(bool isNull, string origen, int direccion, int id) { if (isNull) { return; } else { sqlCommands sql = new sqlCommands(); string direcciones = sql.buscarDirGuardado()[direccion]; string nombreGuardado = Path.Combine(direcciones, id.ToString() + Path.GetExtension(origen)); File.Copy(origen, nombreGuardado); } }
/// <summary> /// Abre los archivos, busca el directorio de guardado en la base de datos. Primero crea una carpeta en los temporary files dependiendo del tipo /// de archivo que es. Despues guarda en la carpeta correspondiente con la opcion deleteonclose. No se pueden abrir dos archivos con el mismo /// nombre al mismo tiempo. /// </summary> /// <param name="tipo">Indica si es specenercom, speccatalo. Integer de 0-4</param> /// <param name="nombreArchivo">Indice el nombre del archivo, si esta vacio no hace nada</param> public void openFiles(int tipo, string nombreArchivo) { if (!string.IsNullOrWhiteSpace(nombreArchivo)) { sqlCommands sql = new sqlCommands(); List <string> listado = sql.buscarDirGuardado(); string dirGuardado = Path.Combine(listado[tipo], nombreArchivo); if (File.Exists(dirGuardado)) { //Crea un nombre de archivo con una terminacion criptografica y a la vez mantiene el ID al principio. string destination = Path.Combine(Path.GetTempPath(), Path.GetFileNameWithoutExtension(nombreArchivo) + " - " + Path.GetFileNameWithoutExtension(Path.GetRandomFileName()) + Path.GetExtension(nombreArchivo)); File.Copy(dirGuardado, destination, true); Process proceso = new Process(); proceso.StartInfo.FileName = destination; proceso.Start(); } else { MessageBox.Show("El archivo que esta tratando de abrir no existe. Edite el material con un archivo asociado nuevo."); } } }
/// <summary> /// Descarga los archivos que estan en la listBox de seleccionados /// </summary> public void descargarArchivos(List <List <string> > nombreArchivos) { //Se crean las carpetas donde se va a guardar y se guardan las direcciones en una lista List <string> directoriosDestino = new List <string>(); directoriosDestino = createFolderStructure(); //Contador para mostrar al usuario cuantos archivos se descargaron. int counter = 0; //Si es true muestra los mensajes de advertencias cuando ocurren errores en el copiado. De lo contrario no las muestra bool advertencias = true; //Verifica que el creado de la estructura del folder fue exitosa. El primer elemento de la lista es "1" si la operacion fue //exitosa if (directoriosDestino[0] == "1") { //Fetches las direcciones de guardado de los archivos a copiar sqlCommands sql = new sqlCommands(); List <string> directoriosOrigen = sql.buscarDirGuardado(); for (int j = 0; j <= 4; j++) { //Verifica que no esten vacia la listas de los nombres de los archivos if (nombreArchivos[j].Count != 0) { //Itera por todos los archivos y los copia for (int i = 0; i < nombreArchivos[j].Count; i++) { try { //El directorio del origen del archivo string origen = Path.Combine(directoriosOrigen[j], nombreArchivos[j][i]); string destino = Path.Combine(directoriosDestino[j + 1], nombreArchivos[j][i]); File.Copy(origen, destino, true); FileInfo fileInfo = new FileInfo(destino); fileInfo.IsReadOnly = false; counter = counter + 1; } catch { //Si las advertencias no han sido suprimidas. Se suprimen cuando el usuario presion que si en la MessageBox if (advertencias) { string message = "Ocurrio un error al momento de descargar el archivo: " + nombreArchivos[0][i] + ". Posiblemente causado porque el archivo no existe. ¿Le gustaria suprimir este mensaje en un futuro?"; string title = "Error en la descarga de especificaciones"; MessageBoxButtons buttons = MessageBoxButtons.YesNo; DialogResult result = MessageBox.Show(message, title, buttons); if (result == DialogResult.Yes) { advertencias = false; } } } } } } //Mensaje de finalizacion MessageBox.Show("Proceso finalizado satisfactoriamente. Se han descargado " + counter.ToString() + " archivos."); } }