Problema con constructores y archivos c#

Iniciado por Kaxperday, 4 Mayo 2015, 11:21 AM

0 Miembros y 1 Visitante están viendo este tema.

Kaxperday

Código (csharp) [Seleccionar]
public partial class Interfaz : Form
   {
       private string directorio = Directory.GetCurrentDirectory();
       private volatile Archivo configuracion = new Archivo(directorio);
...}




Código (csharp) [Seleccionar]
class Archivo
   {
       private String directorio;
       private FileStream datos;// = new FileStream(); //directorio + "\\app.dat", FileMode.Create

       public Archivo(String directorio)
       {
           //Aqui quiero inicialiar el archivo con el handle del directorio que le paso al consructor pero no me deja.
       }


Para obtener el directorio actual debo de hacerlo desde el form o obtengo error, entonces, lo que hago es sacar el directorio del archivo en el form y pasarsele al constructor, entonces quiero que me cree un archivo con ese handle, además quiero que ese archivo poder usarle para lectura y escritura, sin crear más.

Es decir meter un Streamwriter y Streamreader.

Alguna ayuda pls, la idea es crear una clase de archivo para trabajar con un solo archivo con todo, y no crear 20 de estos, necesito el handle del directorio actual y poder escribir en el y leerle con un solo FileStream, ¿es posible? ayuda y gracias gente.
Cuando el poder económico parasita al político ningún partido ni dictador podrá liberarnos de él. Se reserva el 99% ese poder.

Eleкtro

#1
Cita de: Kaxperday en  4 Mayo 2015, 11:21 AM
Código (csharp) [Seleccionar]
private string directorio = Directory.GetCurrentDirectory();

Para obtener el directorio actual debo de hacerlo desde el form o obtengo error, entonces, lo que hago es...

Detente ahí en el "entonces, lo que hago es...", no intentes parchear el problema, trata de solucionar el problema principal, explica cual es el tipo de excepción que te lanza, y el mensaje de error,
Lo mismo para la otra linea que has comentado, "no me deja" no aclara el problema que tienes, da DETALLES.

Cómo alternativa puedes intentar utilizar la propiedad Application.StartupPath, aunque esta devuelve el directorio de inicio de la aplicación en lugar del directorio de trabajo actual (que viene siendo lo mismo a menos que cambias arbitrariamente el directorio de trabajo).

Saludos








Kaxperday

#2
Hola elektro gracias por la respuesta, de acuerdo seré más preciso.

En FileStream no hay un método llamado StartupPath, el problema es quiero abrir un directorio que tenga el handle pasado al constructor apra crear la clase archivo. Al recibir esa direccion (handle), el constructor creará un archivo de tipo FileStream y quiero que lo inicialice con esa dirección, funcionaría sin problemas si dejase usar GetCurrentDirectory(), pero no es el caso solo deja usarlo en el form, no en las demás clases, es por ello que se lo paso como argumento al constructor para que trate de crear el archivo con esa dirección, alguna idea?

No puedo ser mas preciso, no es que me de errores mira, entre otras cosas probé con estas soluciones:

Código (csharp) [Seleccionar]
public void inicializacion()
        {
            datos.Handle(directorio + "\\app.dat");
        }


pero no funcionaba porue Handle esta en deshuso, ponía una excepción de system security pero no me funcionaba tampoco.

Escribiendo esto parezco haber solucionado el problema:

Código (csharp) [Seleccionar]
this.datos=new FileStream(directorio,FileMode.OpenOrCreate);

Poniendo eso en el constructor es suficiente (meme de beso(que lo pongan ya))

saludos, gracias por responder de todas formas. Ahora ya tengo el archivo inicializado para el directorio y pudo trabajar sobre el
Cuando el poder económico parasita al político ningún partido ni dictador podrá liberarnos de él. Se reserva el 99% ese poder.

kub0x

Cita de: Kaxperday en  4 Mayo 2015, 12:29 PM
Código (csharp) [Seleccionar]
this.datos=new FileStream(directorio,FileMode.OpenOrCreate);

Poniendo eso en el constructor es suficiente (meme de beso(que lo pongan ya))

saludos, gracias por responder de todas formas. Ahora ya tengo el archivo inicializado para el directorio y pudo trabajar sobre el

Con eso solventas el error de apertura del fichero pero sigues sin poder obtener el directorio actual desde el manejador de ficheros. Seguramente te hayas pasado algo por alto, errores así no son comunes. Como bien te ha dicho EleKtro acostúmbrate a poner más detalles sobre las excepciones o errores del código, no somos adivinos :p

Por cierto para que quieres crear el Filestream con el handle... esto es alto nivel, el Handle se usaría para otro tipo de gestiones Además la propiedad "Handle" está obsoleta, si quisieras trabajar con el handle del stream deberías usar "SafeFileHandle".

Saludos.
Viejos siempre viejos,
Ellos tienen el poder,
Y la juventud,
¡En el ataúd! Criaturas Al poder.

Visita mi perfil en ResearchGate