Crear archivos .net

Hace unos días te hice una preguntilla y ahora me encuentro de nuevo atascado, a ver si me puedes ayudar ;) Te comento:
En una parte del código hago esto:
escritor = New System.IO.StreamWriter("C:\Archivos de programa\WTR\Profiles\" + TextBox1.Text + ".dat")
Escritor. WriteLine(TextBox2.Text)
Escritor. WriteLine(TextBox3.Text)
Escritor. Close()
Y en una parte posterior lo siguiente:
For Each file As String In path.GetFiles("C:\Archivos de programa\WTR\Profiles\", "*.dat")
ListBox1.Items.Add(System.IO.Path.GetFileNameWithoutExtension(file))
Next
Hasta aquí todo OK. El problema es que luego cuando selecciono uno de los items de la listbox para abrir el fichero correspondiente y leerlo me da error.
lector = New System.IO.StreamReader("C:\Archivos de programa\WRT\Profiles\" + perfil + ".dat")
aplicacion = lector.ReadLine().Split(";")
While aplicacion.Length - 1 > added
ComboBox1.Items.Add(aplicacion(added))
added = added + 1
End While
Pues el problema es que no me inserta nada en el combobox cuando el fichero lo he creado introduciendo valores... Además me dirijo a la carpeta donde debiera estar el fichero y no lo encuentro (no lo puedo ver y no esta oculto ya que también lo he comprobado).
¿Por qué no me genera fichero y no puedo leerlos?
Por otro lado también estaba lanzando esta creación de tabla que me da error:
conexion.ConnectionString = "Jet OLEDB:Global Partial Bulk Ops=2;Jet OLEDB:Registry Path=;Jet OLEDB:Database Locking Mode=1;Data Source=C:\Users\Neoff\Documents\Visual Studio Projects\DataBase\database.mdb;Jet OLEDB:Engine Type=5;Provider=Microsoft.Jet.OLEDB.4.0;Jet OLEDB:System database=;Jet OLEDB:SFP=False;persist security info=False;Extended Properties=;Mode=Share Deny None;Jet OLEDB:Encrypt Database=False;Jet OLEDB:Create System Database=False;Jet OLEDB:Don't Copy Locale on Compact=False;Jet OLEDB:Compact Without Replica Repair=False;User ID=Admin;Jet OLEDB:Global Bulk Transactions=1"
comando = New OleDb.OleDbCommand("CREATE TABLE " + TextBox1.Text + " ([Id] VARCHAR, [A] VARCHAR), [T] VARCHAR, [D] VARCHAR, DOUBLE, [F] DOUBLE, [G] INT1)", conexion)
Conexión. Open()
Comando. ExecuteNonQuery()
Conexión. Close()
Esto me aborta con el error "Excepción no controlada del tipo 'System.Data.OleDb.OleDbException' en system.data.dll" nada descriptivo. ¿Por lo que entiendo que en principio el problema estará en el tipo de valores que le estoy pidiendo?

1 respuesta

Respuesta
1
Es muy aconsejable utilizar el .flush, debes colocarlo antes de escritor. Close().
¿Mensaje de Error?
Con respecto a la conexión la veo complicada en www.connectionstrings.com revisa el connectionString contra el que tienes.
Lo otro que observo en la sentencia CREATE TABLE es que los camposde tipo varchar no tienen longitud y los campos varchar hay que espeficar la longitud del campo.
Hola!
Ya descubrí porque no funcionaba. Resulta que me dio por mirar la seguridad de C: y no puede ni escribir nadie si no es administrador. Yo me logueo en el ordenador con el usuario administrador, pero debe ser que la propia operación de escribir el fichero no tiene permisos de administrador y por ello no me crea nada en esa ubicación.
¿Cómo podría crear ficheros en modo administrador?
Debe poder hacerse ya que sin ir más lejos, todos los programas que me he instalado han creado archivos en dicha unidad...
Lo de la creación de la tabla, era justo ese problema. El caso es que como en access siempre especificas VARCHAR y no dices de que tamaño pues...
Muchas gracias por la creación de la tabla ;) Ya solo me falta crear ficheros en administrador (o que el programa corra bajo los permisos de administrador...)
Gracias de nuevo ;)
Si estas con Win Vista o Win 7, clic derecho en el archivo .exe y ejecutar como administrador.
¿No puedo hacerlo por código? No puedo pedirle a la gente que siempre que la quiera ejecutar tenga que hacer eso...
Si tu aplicación es Windows, si lo puedes hacer, siempre y cuando el usuario que ejecuta la aplicación sea administrador.
Si es una aplicación web obligatoriamente debes darle permisos a la carpeta de manera manual
Si, es windows. ¿Conoces los comandos necesarios para hacer por código que se ejecute una aplicación como administrador o al menos parte de ese código?
El tema es que la carpeta en donde quieres escribir los archivos tenga permisos para ello.
¿Tu estas dentro de una red windows?, ¿La aplicación la usa un usuario del directorio activo o es un usuario guest?
Si no, ¿en qué carpeta estas intentando escribir los archivos? ¿WTR es la carpeta de tu aplicación?
Mediante código no se puede hacer nada entonces... He pensado crear una carpeta en mis documentos pero la ruta cambia si el equipo es WinXP, Vista o Win7. ¿Hay alguna forma de saber que sistema operativo esta ejecutando la aplicación? O mejor aún, tengo alguna forma de consultar el registro del sistema o similar para obtener la ruta de mis documentos (así si la unidad esta particionada y la ruta no es c: si d: ¿U otra no tendría tampoco problemas con la unidad)?
Además luego quisiera crear un instalador. Se que se puede crear mediante un asistente, pero quiero que durante la instalación se obligue a tener el programa en una ruta determinada. ¿Habría otra forma que no fuera mediante el asistente para crear un instalador que no sea muy complicado y que obligue a instalar el programa en una ruta? También me gustaría cambiar la imagen que tiene el instalado por defecto, ¿se puede?
Muchas gracias por todo ;)
Yo crearía una carpeta dentro del directorio donde se instala la aplicación, para saber la ruta puedo usar Application. Startup y con el import System. IO, puedes acceder a clase de Dir.CreateDirectory, por ejemplo
Con respecto al instalador, puedes configurarlo de la manera como lo expones.
Muchas gracias por toda tu ayuda ;) Al final lo conseguí con el siguiente código por si te sirve.
Dim registryKey As Microsoft.Win32.RegistryKey
registryKey = Microsoft.Win32.Registry.CurrentUser.OpenSubKey("Software\Microsoft\Windows\CurrentVersion\Explorer\User Shell Folders", False)
Gracias!

Añade tu respuesta

Haz clic para o

Más respuestas relacionadas