Visual Basic.NET - Evitar guardar archivo que no sea del mismo tipo(extensión) de mi aplicación.

 
Vista:
Imágen de perfil de HAROLD ALONSO QUINTERO PINEDA

Evitar guardar archivo que no sea del mismo tipo(extensión) de mi aplicación.

Publicado por HAROLD ALONSO QUINTERO PINEDA (18 intervenciones) el 24/04/2017 23:13:31
Muy buenas tardes a todos:

Estoy creando una aplicación de ejemplo, y ya he podido realizar los métodos Save,SaveAs,Open y New. La extensión que estoy usando es de tipo ".exa". Ahora, lo que deseo es que el usuario al intentar guardar un archivo que actualmente trabaja en uns instancia de mi aplicación, y que intente sobreescribir un archivo que sea de otro tipo de extensión(.pdf,etc...), en el componente SaveFileDialog, no me permita hacerlo. Muestro el código que tengo implementado en el método Save.
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
 ''' <summary>
    ''' Permite guardar en un archivo, la serialización de las instancias actuales de las Clases del proyecto
    ''' mediante el uso de la Función <remarks><seealso cref="Obtener_Clase_Serializar()/></remarks>,
    ''' la cual permite obtener la instancia actual de todas las clases del proyecto, en una sola clase contenedora.
    ''' </summary>
    ''' <param name="fs">Stream del archivo donde se guarda el estado actual de la aplicación.</param>
    Private Sub Save(fs As FileStream)
 
        'Verifico que el archivo Stream es Nothing.
        '
        If (fs Is Nothing) Then
 
            'Esto indica, que aún no se ha bloqueado un archivo dentro de la varibale "stream"
            'del formulario principal, lo cual puede darse porque o el usuario ha usado la opción
            'Nuevo de la aplicación o simplemente ha abierto el programa desde el ejecutable, y
            'en el constructor de la clase Form1, lo toma como si fuera un nuevo archivo.
            'Validamos todos los datos en un Try, para evitar errores. Es casi el mismo método SaveAs
            'más sin embargo existe un ligero cambio pues ya no se usa a comparación del método mencionado
            'la línea de código Stream.Dispose(sino la suprimo,genererá una excepción que dice que no existe
            'una instancia del objeto stream que liberar, es obvio, es Nothing).
            '
            Try
 
                'Variable para obtener el nombre de la ruta del archivo donde desea
                'guardar el archivo.
                Dim fileName As String = String.Empty
 
                'Creamos una nueva instancia de la clase SaveFileDialog
                Using sfd As New SaveFileDialog()
                    sfd.DefaultExt = ".exa"
                    sfd.Filter = String.Format("Archivos del proyecto ({0})|*.{0}|Todos los archivos|*.*", sfd.DefaultExt)
                                       'sfd.AddExtension = True ' El valor por defecto es True.
 
                    'Creo una variable de cuadro de dialogo, resutante del ShowDialog del SaveFileDailog.
                    Dim dr As DialogResult = sfd.ShowDialog()
                    '
                    'Verifico si el usuario ha presionado el botón Save o Guardar
                    If (dr = DialogResult.OK) Then
                        'Obtengo la ruta del archivo que intenta guardar en el SaveFileDialog
                        fileName = sfd.FileName
                        '
                    End If
                End Using
                '
                If (fileName.Length > 0) Then
                    '
                    'Creamos una nueva secuencia de sólo escritura con el archivo seleccionado.
                    'Si el usuario reemplaza otro archivo, no generar ningún error.(FileMode.Create)
                    '
                    Using fs_nuevo As New FileStream(fileName, FileMode.Create, FileAccess.Write)
                        ' Procedemos a serializar las clases. 
                        Dim serializador As New Cl_Serializacion_Binaria()
                        '
                        'Se pasa al serializador el objeto actualizado y el stream donde se guardan los cambios.
                        serializador.Serialize(Obtener_Clase_Serializar, fs_nuevo)
                        '
                    End Using
                    '
                    'Bloque el archivo actual, para que sea exclusiva de la instancia actual de la aplicación.
                    '
                    stream = AbrirArchivo(fileName)
                    '
                    'Se cambia al formulario principal de la aplicación, el título, asignándole el nombre del
                    'archivo actual que se trabaja.
                    Me.Nombre_form_pcpal(fileName)
                    '
                End If
 
            Catch ex As System.IO.IOException
                '
                ' Se ha producido un error en entrada/salida, incluyendo si
                ' ya existe un archivo con el mismo nombre.
                XtraEditors.XtraMessageBox.Show(ex.Message, ex.GetType().FullName, MessageBoxButtons.OK, MessageBoxIcon.Error)
 
            Catch ex As Exception
                '
                ' Otros errores diferentes a IOException
                XtraEditors.XtraMessageBox.Show(ex.Message, ex.GetType().FullName, MessageBoxButtons.OK, MessageBoxIcon.Error)
 
            End Try
 
            'Caso contrario, ya la variable fs no es Nothing, lo cual indica que ya se ha usado
            'y esto sucede cuando ya se ha guarado en disco un archivo, por ende el usuario lo 
            'que desea es actualizar el archivo con nuevos datos, es decir, guardar los cambios 
            'hechos.
        Else
            'Validamos todos los datos en un Try, para evitar errores.
            '
            Try
                ' Como nuestra intención es guardar los datos en la misma
                ' secuencia especificada (en el mismo archivo fs), tenemos que
                ' posicionarnos en el inicio de la secuencia(fs.Position) para que se
                ' sobrescriba todo su contenido.
                '
                fs.Position = 0
 
                ' Procedemos a serializar las clases.
                Dim serializador As New Cl_Serializacion_Binaria()
                serializador.Serialize(Me.Obtener_Clase_Serializar(), fs)
 
            Catch ex As IOException
                ' Errores relacionados con entradas/salidas de secuencias.
                MessageBox.Show(ex.Message, ex.GetType().FullName)
 
            Catch ex As Exception
                XtraEditors.XtraMessageBox.Show(ex.Message, ex.GetType().FullName, MessageBoxButtons.OK, MessageBoxIcon.Error)
                MessageBox.Show("Ha ocurrido un error al intentar guardar los cambios en el archivo.", "Error en aplicación", MessageBoxButtons.OK, MessageBoxIcon.Warning)
            End Try
        End If
 
    End Sub

Espero me puedan ayudar. Muchas gracias.
Valora esta pregunta
Me gusta: Está pregunta es útil y esta claraNo me gusta: Está pregunta no esta clara o no es útil
0
Responder
sin imagen de perfil

Evitar guardar archivo que no sea del mismo tipo(extensión) de mi aplicación.

Publicado por arbol (166 intervenciones) el 24/04/2017 23:29:08
saludos

solo ponle una condicion if
si es diferente a las extenciones que usas

pues niegale que lo guarde
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
1
Comentar
Imágen de perfil de HAROLD QUINTERO PINEDA

Evitar guardar archivo que no sea del mismo tipo(extensión) de mi aplicación.

Publicado por HAROLD QUINTERO PINEDA (18 intervenciones) el 25/04/2017 22:55:13
Hola, muy buenas tardes. Si, esa puede ser, pero quería saber si existe un método dentro de la misma Clase SaveFileDialog, para este tema. Pero, voy a resolverlo mejor, quitando el filtro de "Todos los archivos", con esto hago que sólo muestre archivos de mi aplicación, y le da más seguridad a la misma.

Muchas gracias de todos modos compañero. Dios le bendiga.
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar
sin imagen de perfil
Val: 481
Bronce
Ha mantenido su posición en Visual Basic.NET (en relación al último mes)
Gráfica de Visual Basic.NET

Evitar guardar archivo que no sea del mismo tipo(extensión) de mi aplicación.

Publicado por Miguel (476 intervenciones) el 25/04/2017 03:24:21
Pues en la propiedad Filter del SaveFileDialog quítale el "Todos los archivos|*.*"...
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
1
Comentar
Imágen de perfil de Harold

Evitar guardar archivo que no sea del mismo tipo(extensión) de mi aplicación.

Publicado por Harold (18 intervenciones) el 25/04/2017 22:57:59
Hola Miguel. Voy a usar tu solución, pues aunque quería saber si la clase SaveFileDialog tiene un método que haga esta función, el quitar el filtro de todos los archivos es la que más se acomoda para este caso.

Muchas gracias. Dios le bendiga.
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar