Notas de actualización:
Si bien este artículo se vio ya superado por nuevas tecnologías, queda como una buena referencia de aprendizaje. Si estás buscando un control ya hecho, con buenas funcionalidades, recomiendo que busques las referencias al final del artículo.
La Web 2.0 permitió a los usuarios de internet interactuar bases de datos y archivos y procesos del servidor, lo que dió lugar a los sitios dinámicos que se alimentan con información de los usuarios. Un control interesante en ASP:NET que permite esto es el control FileUpload para subir archivos desde la máquina del usuario al servidor sin necesidad de usar FTP. Con este tipo de controles, compartir fotos en la red y otro tipo de archivos se transformó en un juego de niños.
Sin embargo, el control que viene con Visual Studio permite subir un archivo por cada control que se incluya, lo que limita la cantidad de archivos a la cantidad de controles incluidos en la página. Una opción es preguntarle al usuario cuántos archivos quiere subir para que podamos crear dinámicamente la cantidad de controles que necesitemos, pero a veces este procedimiento es un tanto molesto.
Inspirándome en este artículo decidí construir este control web (Web User Control) que aquí publico, el que permite agregar dinámicamente la cantidad de archivos a subir a medida que los vamos eligiendo. El secreto se basa en ir agregando los controles desde JavaScript, para evitar perder los archivos que se fueron cargados con algún eventual Postback producido por algún otro evento de la página.
Este control dista bastante de esos como los que usa Google o Facebook, donde se pueden seleccionar todos archivos de un saque, pero es bastante simple y práctico. Aquí está disponible el código fuente, por lo que cada uno pude hacerle las mejoras que requiera para su proyecto. Por otro lado, tampoco es asincrónico. Para eso recomiendo hacer algo con el control Ajax AsyncFileUpload.
Volviendo a lo nuestro, así se ve el control en Internet Explorer 8 y Opera 11 , con la hoja de estilos CSS adjunta. Con Firefox se ve bastante parecido a esto también.
Chrome y Safari muestran el control FileUpload de otra forma, por lo que habrá que modificar los estilos correspondientes si se quiere cambiar el aspecto.
Propiedad | Descripción | Valor default |
Titulo | Título a mostrar en el control. Para no mostrar nada, establecerlo en string.empty. | Si no se establece esta propiedad, se muestra "Archivos a subir". |
Comment | Una nota depués del título. |
string.empty
|
DestinationFolder | Carpeta donde se guardarán los archivos en el servidor. Si no existe, puede ser creada. Se establece el path relativo y no el físico. Para que la carpeta sea creada en el servidor, el usuario de internet debe tener premisos de escritura. Esta propiedad es obligatoria. |
-
|
UploadButtonIsVisible | Muestra el botón de "Subir archivos" dentro del control. Sirve para subir los archivos de forma independiente al resto de las acciones de la página. Si se quiere realizar otras acciones antes de subir los archivos se puede dejar este botón no visible y llamar manualmente al evento UploadFiles(CreateDir). |
false (no visible)
|
FileExtensionsEnabled | Limita los archivos a subir a las extensiones aquí definidas. Las extensiones se deben establecer separadas por "|" (pipe). Ej: ".txt|.jpg|.gif". Si no se establece esta propiedad, cualquier extensión es admitida. |
null
|
HasFile | Solo lectura. Indica si el control tiene al menos el primer archivo seleccionado. |
false
|
MaxFilesLimit | Cantidad máxima de archivos que el usuario puede agregar. Si se establece en cero, funciona igual que el control estándar FileUpload (solo deja subir un archivo). Si esta propiedad no se establece no limita la cantidad de archivos a agregar. |
null
|
MaxUploadSize | Límite en bytes de la tranferencia de todos los archivos a subir. Ver debajo más detalles sobre limitaciones. |
Hasta 4 MB
|
El control tiene solo un método:
Método | Descripción |
UploadFiles(bool CreateDir) | Realiza la subida de los todos los archivos seleccionados en el control. Si el parámetro CreateDir se establece en true, indica que el directodio destino definido en DestinationFolder debe crearse si no existe. |
Limitaciones:
- Por cuestiones de seguridad, de manera predeterminada con el control FileUpload se pueden subir de hasta 4 megabytes de una sola vez. Pasado ese límite se producirá un error "denial of service". Este control no captura ese error.
Sin embargo, tal como se explica en la especificación de la clase FileUlpload, se puede aumentar ese límite modificando el web.config de la aplicación. Por ejemplo para establecer el límite en 100MB, que deben ser subidos en menos de 15 minutos, se debe agregar <httpRuntime maxRequestLength="102400" executionTimeout="900"/> dentro de <system.web> del archivo web.config de nuestra aplicación web.
- El control está escrito en C#, por lo que los programadores de Visual Basic .Net deberán pasarlo. Se agradece el aporte de quien lo haga. Una página que puede ayudar a ésto es esta, que permite convertir C# en VBNet y viceversa. Funciona bastante bien.
- Solo se puede utilizar un control por página. Para utilizar varios en una misma página es necesario realizar modificaciones al código.
Uso simple:
El siguiente video explica como implementar el control de manera simple y rápida con Visual Studio 2010.
Download de archivos:
Desde aquí se puede bajar el código fuente del control con sus estilos para usarlo directamente.
Aquí hay un ejemplo de configuración y uso en un ejemplo para Visual Studio 2010.
- MultiFileUpload_VS2010example.rar (actualizado nov.2012 con función para mostrar los archivos subidos. Hacer Archivo > Descargar para bajar el proyecto completo ).
Conclusión:
Más allá de la utilidad de este control, en el código fuente se puede ver cómo manejar propiedades dentro de un Web User Control utilizando el StateBag ViewState, registrar código JavaScript en una página o en su Masterpage con RegisterStartupScript y hasta cómo usar básicamente expresiones regulares.
Espero sea de utilidad.
Actualización:
Para soluciones más concretas quizás quieras ver este control, que está hecho pensando en las posibilidades del javaScript sobre los navegadores más nuevos.
Actualización 2:
Con la evance y difusión de jQuery como standard, sin dudas el control que yo utilizaría es jQuery File Upload.
Hola Marcelo, interesante el control. Tengo una duda, a ver si me la puedes aclarar. Yo necesito subir varios archivos, 4-5, cada uno de ellos, debe estar referenciado de una forma concreta, por ejemplo, un documento es un contrato, otro un certificado, otro un proyecto...siempre el mismo tipo de documentos. Me gustaría que cuando se suban, se marque sobre una base de datos el documento que se ha subido, vamos, el tipo de documento (contrato, certificado, etc.) ¿Eso es posible con este control?
ResponderEliminarHola José. Sobre el control lo que se puede hacer es restringir el tipo de archivo a subir (en base a su extensión) y en todo caso su
ResponderEliminartamaño.
Para el problema que planteas, solo se me ocurren dos cosas: poner un control independiente para cada documento y dejar la responsabilidad al usuario para que determine cuál va a ir en cada uno e incluirlos correctamente, o procesar el archivo una vez subido para detectar el tipo de documento. Este sería como "abrir" y "leer" el documento automáticamente. Si son archivos de texto es fácil, se complica algo más para otros tipos de archivo. Si fueran de Word, por ejemplo, se podría usar Automation para eso.
Luego de esta validación, hay que ponerle un mensaje al usuario y eliminar el documento incorrecto del servidor.
El control es simplemente un transportador de archivos que permite transferirlos desde una máquina a otra vía HTTP, y no mucho más que eso.
Saludos, y gracias por los comentarios!
Gracias Marcelo,
ResponderEliminarSeguramente la mejor opción es la primera que planteas, que se suban documentos de forma independiente con un control...Probaré a ver que saco.
Gracias. Un saludo,
José Manuel
hola que tal una vez que ya tenga subido los archivos para poder mandarlos a traer por fecha o por nombre y tambien como eliminar los archivos una vez cargados
ResponderEliminarUtiliza System.IO.
ResponderEliminar// Elimina todos los archivos de la carpeta "Biblioteca"
System.IO.DirectoryInfo _dirInfo = new System.IO.DirectoryInfo(HttpContext.Current.Server.MapPath("~/Biblioteca"));
System.IO.FileInfo[] _filesInfo = _dirInfo.GetFiles();
foreach (System.IO.FileInfo _f in _filesInfo)
{
if (_f.Exists) // Este if es demostrativo. Se supone que si está en la lista existe.
_f.Delete();
}
// Este ejemplo abre el archivo "Nombres.txt" de la carpeta "App_Data" y lee su contenido.
System.IO.StreamReader _st = System.IO.File.OpenText(HttpContext.Current.Server.MapPath("~/App_Data/Nombres.txt"));
while (!_st.EndOfStream)
{
// lee cada línea del archivo de texto.
string _tema = _st.ReadLine();
// hacer algo
}
Espero te ayude.
Saludos!
gracias me as ayudado mucho
EliminarSera posible tener ese ejemplo en Visual Studio 2008?
ResponderEliminarLo que puedes hacer es crear un proyecto con Visual Studio 2008 y luego incluir los archivos del ejemplo manualmente. No lo probé, pero el código debería funcionar sin problemas.
ResponderEliminarSaludos!
Necesito realizar algo medio complejo, la idea es desde un sitio web, buscar archivos excel, y obtener la ruta del archivo para poder manipularlo como origen de datos (OLEDB), pero he intentado obtener la ruta fisica del archivo y creo que por seguridad no lo permite (en WEB), si pudiera ayudar seria de gran a yuda o una orientacion de como se puede realizar esto, me han dado ideas de poder utilizar en archivo en memoria (convertir un streamFile en xls y viceversa),
ResponderEliminaratentoa sus comentaios
DIEGO; CHILE
Hola Cristopher, aclarame esto: ¿los archivos excel a buscar están en el servidor verdad? deberían estar en un directorio del cual puedas obtener la ruta física mediante Server.MapPath, o bien teniendo la ruta física esa carpeta tendría que tener permisos de lectura al menos para el usuario del sistema configurado en el IIS. ¿qué error te está dando al intentar acceder a los archivos?
EliminarConvertir el archivo en memoria sería algo un tanto pesado de procesar, ya que lo estarías haciendo por cada sesión o usuario conectado. Una vez obtenido el archivo yo lo copiaría a un directorio de trabajo temporal y luego ahí trabajas con el. Hay que ver cuales son tus necesidades funcionales...
Aqui codigos VB.Net 2010 --->http://ayudaveloz.blogspot.com/
ResponderEliminarHola Marcelo muy buen tuto para este control, queria ver si me puedes ayudar a implementar con este mismo control una barra de progreso, es decir que avise el progres de subida del archivo. Gracias!
ResponderEliminarMuchas gracias por los comentarios Nelson. La idea de la nota es sobre todo introductoria al tema. Pero más allá de eso, igualmente me encantaría poder ayudarte, aunque por el momento estoy con muy poco tiempo para los desarrollos. Te paso aquí unos links que tienen código de ejemplo para bajar. Quizás encuentres la solución a tu problema más concretamente:
Eliminarhttp://www.codeproject.com/Articles/106511/Multiple-file-uploads-with-progress-bar-using-clas
http://mattberseth.com/blog/2008/07/aspnet_file_upload_with_realti_1.html
Por otro lado, no dejes de ver fineuploader, que es un control javascript que seguramente funcionará muy bien en los nuevos navegadores (yo no lo probé, así que no te puedo dar muchos detalles, pero un amigo me lo recomendó):
http://fineuploader.com/
Espero con esto darte al menos un indicio para que puedas lo que necesitas.
muy bien Muchas gracias Marcelo!
Eliminarhola marcelo, me gusto la explicacion, pero tengo un problemita que detecte, al momento de subir 2 archivos con el mismo nombre, lo sobreescribe, incluso probe subiendo 2 archivos con el mismo nombre pero diferentes extensiones un jpg y un doc, pero igual lo sobreescribe, no se si me puedes ayudar a restringir esa parte muchas gracias, saludos
ResponderEliminarPaola, ¿estás segura que verdaderamente tiene distina extensión? Para comprobarlo, pod´s poner un breakpoint luego de la definición de la variable _f2Save (línea 144 del control ucMultiFileUpload.ascx). En esa variable vas a ver el path y nombre del archivo completo. De todos modos, si aún te interesa verificar que el archivo existe antes de guardarlo podría validarlo haciendo algo como
Eliminarif (!File.Exists(_f2save))
justo antes de guardar el archivo, donde dice _postedF.SaveAs(_f2save);
Espero que te sirva!
Saludos
hola Marcelo ..para poder mostrar automaticamente las imagenes k acabas de subir es posible hacerlo.. disculpa pero no llevo mucho usando el Visual Studio . Gracias por el aporte ya con eso es bueno para sakar mi proyecto
ResponderEliminarTe doy un ejemplo básico:
Eliminaragrega un panel en la página, (asp:Panel runat="server" ID="pnlImagenes")
Después, en el codebehind de la página recorres el directorio donde se subieron los archivos (la propiedad “DestinationFolder” del control) y se la asignas a un nuevo control Image. Luego agregas este control a la colección de controles del Panel “pnlImagenes”.
Actualicé el archivo con el proyecto de ejemplo con el código para mostrar las imágenes. Bajalo para ver cómo funciona. Para más información lee mi respuesta al mensaje de zirba del 29 de mayo 2012.
muchas Gracias ..
ResponderEliminarhola lo tienes para vb.net gracias
ResponderEliminarNo, pero fijate en el texto de la nota que hay un link a un conversor de código C#/VB.Net. Con un poco de trabajo lo podrás convertir.
EliminarSaludos.
hola marcelo como se confgura el web.config
ResponderEliminarcuando a tu maquina la haces servidor.. ya logre hacer la maquina en servidor.. pero al momento de logearme no me acccede es error de base de datos no la jala.. estuve investigando y es el web.conf creo ay codigo que tiene que implementarse pero me perdi. gracias
Hola Lino, disculpame pero no entiendo muy bien tu pregunta ¿cuál es el error que te aparece, o qué es lo que estás intentando hacer? Este control no tiene nada que ver con la base de datos. Si es en el proyecto del ejemplo, el mismo está creado como aplicación desde Visual Studio, con lo cual incorpora mecanismos de login, pero en este caso no se utilizan.
EliminarSaludos.
hise esto http://oferycompra.no-ip.org/
ResponderEliminarel servidor es mi lap.. pero el login no me deja accceder sabe como solucionar eso??
no puedo acceder el formulario no sirve
estuve investigando y se le modifica el web.conf que se crea una vez k hisistes el servidor pero ay me perdi..
El login funciona con una base de datos. En el web.config hay que configurar el string de conección en la sección "connectionStrings"(generalmente el string de conexión predeterminado es el "DefaultConnection").
ResponderEliminarMás información no puedo darte por aquí, ya que esta nota habla de un control para subir archivos, y tu consulta escapa al tema. Te sugiero que busques por temas con referencia a SQL Memebership Provider y creación de cadenas de conexión.
Saludos.
oie disculpa marcelo no tienes unos links para mi ayuda lo que pasa es que yo quiero subir los harchivos poder eliminarlos y visualizalors ala ves que cuando lo seleecione pueda ver el harchivo o acceder a el lo cual igual quiero consultar los harchivos y poder buscarlo por su nombre por q si tengo muchos harchivos seria dificil buscarlos..
ResponderEliminarSteephen, en ese caso te sugiero que utilices una base de datos donde guardes el nombre del archivo. A partir de eso se puede crear una página de búsqueda y eliminación (y otras cosas que quieras, como por ejemplo añadir comentarios). Así, cuando el usuario elimina el nombre del archivo de la base de datos, eliminas también el archivo físico en el mismo proceso.
EliminarSaludos!
Buenas tardes,
ResponderEliminarHabría forma de cear x número de fileupload en el load de la página que contiene el control?, es decir no crear los controles al presionar el botón agregar. Gracias.
Si, básicamente de dos formas: una es modificando el código JavaScript que se crea dinámicamente con el control. En en el code behind del control (ucMultiFileUpload) se encuentra el elemento StringBuilder _js, que contiene el código JavaScript que crea el control cada vez que el usuario presiona el botón de agregar. Elimina ese botón y modifica el JavaScript para crear varios controles juntos. La otra opción es modificar el control para que sus propiedades se manejen a través del ViewState de la página, en base a un ID único de elemento HTML que se genere dinámicamente (por ejemplo un GUID). De esa manera se pueden usar varios controles independientes en la misma página, pero como dice la nota, en este ejemplo eso no está contemplado y en cualquier caso tendrás que modificar el código.
EliminarSaludos!
Buenas tardes,
EliminarModifique el código de java script como recomendó, y lo que hice fue adicionarle un textbox al control en el cual ingreso el número de controles FileUpload que quiero crear y al dar clic en el botón Agregar se cran, pero cuando intento cargar los archivo que he seleccionado estos no me suben, la única forma de que me suban es dejando siempre el primer FileUpload que no es creado por javascript. Alguna idea de porque pueda suceder esto. Gracias.
¿Podrías pegar aquí el código modificado? Así vemos si podemos encontramos el problema.
EliminarSaludos!
El cambio no fue muy grande, básicamente pasé el javascript al ucMultiFielUpload.ascx y quité el método "protected override void OnPreRender" y quedó así:
Eliminar<_script type="text/javascript">
function addFileUploadCtrl() {
var a = document.getElementById('MainContent_ucMultiFileUpload1_txtNumDocs');
for (i = 1; i <= a.value; i++) {
if (!document.getElementById || !document.createElement)
return false;
var uploadArea = document.getElementById("MainContent_ucMultiFileUpload1_pnlUpload");
if (!uploadArea) return;
var _uploadControl = document.createElement("input");
if (!addFileUploadCtrl.newID)
addFileUploadCtrl.newID = 1;
_uploadControl.type = "file";
_uploadControl.setAttribute("id", "upldFile_" + addFileUploadCtrl.newID);
_uploadControl.setAttribute("name", "upldFile_" + addFileUploadCtrl.newID);
_uploadControl.setAttribute("class", "fileInput");
uploadArea.appendChild(_uploadControl);
addFileUploadCtrl.newID++;
document.getElementById("MainContent_ucMultiFileUpload1_lblInfo").style.display = 'none';
}
}
Modifique la etiqueta para que me aceptara publicar.
Adicioné un textbox (txtNumDocs) que es donde ingreso el número de controles a crear y al pulsar el agregar (el mismo) me crea los controles.
El problema está en la Línea HttpFileCollection _fcol = Request.Files; ya que en _fcol no me trae ninguna colección de controles.
Espero esto te sirva para ver si encuentras ves donde puedo estar cometiendo algún error.
Quedo atento a su respuesta. Gracias por la ayuda.
La verdad que no pude encontrar el error porque tu código funciona. Lo copié tal cual y modifiqué el resto tal como lo indicas. Los archivos subieron perfectamente. Fijate si no hay algún otro tipo de problema. Yo lo probé con Chrome. En todo caso mira el código de la página inspeccionando con el navegador (presionando F12, que es lo mismo para Explorer y otros). Lo único que estaba mal al copiar fue que la primer línea dice "_script type..." (hay un guion bajo antes de script) y hay agregar el cierre del bloque de javascript. Todo lo demás está bien.
EliminarSaludos
Muchas gracias por tomarse el tiempo de revisar el código, el guión bajo enla etiqueta lo coloque para que esta página me dejara publicar dentro del comentario el código, ya que no recibia la etiqueta. Voy a revisar lo que me comenta y si encuentro algo lo estaré comentando. Muchas gracias de nuevo.
Eliminarbuenas tardes
ResponderEliminartengo una pregunta
¿Que código utilizo para descargar un archivo que se subió por medio del control fileupload?
muchas gracias
Hola,
EliminarPara descargar el archivo solo hay que poner un link que apunte a la url del mismo dentro de tu sitio. Fijate además que una de las respuestas de los comentarios está el código para eliminar los archivos.
Saludos
Este comentario ha sido eliminado por el autor.
EliminarBuenas tardes marcelo
Eliminarhe investigado acerca de las descargas de archivos y las funciones que tiene cada método y propiedad de este, generé el siguiente código en el evento linkbutton sin ningún error:
protected void LinkButton1_Click(object sender, EventArgs e)
{
string filename = Request.QueryString.Get("FileName");
if (String.IsNullOrEmpty(filename))
{
String dlDir = "~/uploads/";
String archivo = Server.MapPath(dlDir + filename);
System.IO.FileInfo toDownload = new System.IO.FileInfo(archivo);
if (!toDownload.Exists)
{
Response.Clear();
Response.AddHeader("Content-Disposition", "attachment; nombre de archivo= 84960212.jpg"+archivo);
Response.AddHeader("Content-Length", toDownload.Length.ToString());
Response.ContentType = "application / octet-stream";
Response.TransmitFile(Server.MapPath("~/uploads/84960212.jpg"));
Response.WriteFile("~/uploads/84960212.jpg");
Response.End();
}
}
}
Al ejecutar me descarga el mismo formulario en vez del archivo que estoy pidiendo.
PD:
Tengo entendido que la linea de código Response.ContentType = "application / octet-stream";
esto debería abrír la ventana auxiliar "guardar como..."
Muchas Gracias.
Hola Maico, me parece que te estás enredando más de la cuenta. Lo único que tienes que hacer es crear un link (con el tag HTML "a") a tu archivo. En tu caso, algo así como [a href='uploads/84960212.jpg'>84960212.jpg[/a] (cambia los corchetes por los correspondientes signos mayor y menor).
EliminarEn el caso de las imágenes, el navegador va a abrirlas (el usuario debería saber cómo descargar una imagen al disco). Archivos con otras extensiones, el navegador va a intentar la descarga automáticamente. Mira en el código del ejemplo de la nota (descarga la última versión actualizada, por las dudas), y ve cómo se generan las imágenes dinámicamente para darte una idea.
Muchas Gracias por la aclaración marcelo, no me habia fijado que eso también se podía realizar por etiquetas, pero en el proyecto que estoy realizando el profesor me exijio con código. De todas Formas ya me descarga el archivo por código.
EliminarMuchas Gracias.
Hola marcelo, Buen tutorial!, Mi pregunta es cuales permisos hay que modificar para poder visualizar los archivos subidos en la solucion de visual studio
ResponderEliminarSi pudiste subirlos es porque la carpeta del sitio donde se guardan los archivos tiene ya permisos de escritura. El mismo usuario de internet (configurado en IIS) seguramente entonces que ya tenga también configurados permisos de lectura sobre esa carpeta, para que los archivos puedan descargarse.
EliminarSaludos!
en serio funciona el codigo? tengo un proyecto en asp.net y agrego los archivos .ascx y .ascx.cs al proyecto, pero no se como registrarlos al proyecto, porque la linea
ResponderEliminarProtected WithEvents ucMultiFileUpload1 As Global.MultiFileUpload
marca error porque no esta definido, como agrego la referencia?
ah ya lei que se necesita transcribirse para usar en vb. gracias.
ResponderEliminarSaludos,,
ResponderEliminarAntes que todo le quiero agradecer por este aporte, me es de mucha ayuda.
Como puedo cambiarles los nombres a los archivos el momento que subo??
Oscar, al momento de guardar (fijate en la #region Guardar Archivo) le cambias el nombre al hacer _postedF.SaveAs(_f2save), donde _f2save es la ruta y nombre de tu archivo.
EliminarSaludos!
Gracias Marcelo, voy a intentarlo.
EliminarFuncionó a la perfección. Gracias Marcelo. (Existe un error en Internet Explorer al momento de agregar otro campo de "file", la etiqueta "Agregar" se cambia de posición) pero nada complejo.
ResponderEliminarestimado, soy nueva en esto del Java Script y no sé por que hago todos los pasos del tutorial para agregar el control a mi proyecto y no me reconoce los labels el control nada... no se que estoy haciendo mal
ResponderEliminarHola Natalia,
EliminarTendría que ver tu código para ver qué te está pasando. Pero antes ¿bajaste los archivos de ejemplo, que si funcionan? En todo caso te sugiero que compares los que estás haciendo con los archivos del proyecto de ejemplo.
Saludos!
El segundo link esta caido, lo podrias resubir por favor.
ResponderEliminarGracias por el aviso Joel. Ya está reparado el link.
EliminarSaludos!
Hola Marcelo, me encanta el control, es un excelente aporte.Ahora, tengo que resolver algo, ¿Qué debo cambiar en el código para que me valide la extensión del archivo, al presionar el botón "Agregar"?. Actualmente lo hace, pero al final cuando le das al botón "Subir Archivos" y te borra todo lo que ingresaste en los distintos FileUpload.
ResponderEliminarHola, muchas gracias por tus comentarios.
EliminarFijate que hay una función ValidarExtensiones(HttpFileCollection p_Fcol) a la que se le pasan los archivos a subir. Una expresión regular valida que la extensión exista, y sino elimina los archivos del upload.
Las extensiones se especifican en la propiedad del control FileExtensionsEnabled. Fijate que en este mismo texto está la definición, y cómo se utiliza.
Saludos!
Hola Antes que todo le quiero agradecer por este aporte, me es de mucha ayuda, ya tenga subido los archivos. Todo es en visual studio espero tu ayuda por favor:
ResponderEliminarEs la pregunta
En la elección universitaria hubo problemas por algunos alumnos de las sub-sedes.
Permita subir los resultados obtenidos por cada lista en la sede central y en cada sub-sede. Después de cargar los archivos debe procesarlos y dar los resultados finales con la lista ganadora, y si ninguno de ellos supera el 50%+1, entonces mostrar el mensaje que habrá “segunda vuelta” en caso que haya dos o más listas. Si hay solo una lista, entonces, se declara las elecciones como “Anulado”.
1) mostrar el contenido de archivo 1,2,3 en un listbox.
2) Procesar los archivos con los resultados de los votantes.
3) Mostrar los resultados del ganador de las elecciones o si hay segunda vuelta
4) El número de archivos muy variable
5) Verificar duplicidad de archivos cargados
Link caido pueden volver a subirlo porfavor
ResponderEliminar