You are on page 1of 42

Operaciones bsicas con archivo y

carpetas
10/11/2012 by Fernando Santos | 0 comments
A menudo se debe comprobar si una hoja de clculo, archivo o carpeta existe, o si un
determinado archivo est actualmente abierto. Usted tambin podra tener que eliminar un
archivo. Tambin se puede comprobar si un archivo o una carpeta existe. El uso de macros
con el aplicativo VBA de Visual Basic proporciona una herramienta basada en objetos para
trabajar con carpetas y archivos. De esta forma se puede facilitar las cosas a travs de una
macro en el uso diario. A continuacin se muestra algunos ejemplos bsicos con archivos y
carpetas.
EJEMPLOS:
1. VISUALIZAR LA UBICACIN DEL ARCHIVO EXCEL ACTUAL
Se puede hacer esta operacin con la creacin de la siguiente macro:
MsgBox Ubicacion de archivo: & CurDir
Otra forma de mostrar est misma operacin es a travs de controles Activex que se
insertan en la hoja de clculo. Esta operacin se puede visualizar en la siguiente imagen.
- En la hoja de clculo, insertamos el botn de comando

- Al hacer click izquierdo sobre el botn, nos muestra la ventana del aplicativo VBA en el
cual se digita MsgBox Ubicacion de archivo: & CurDir.

- Finalmente en la hoja de clculo se hace click izquierdo sobre el botn y nos muestra el
siguiente mensaje.

2. CAMBIAR LA UBICACIN ACTUAL DE D AL DISCO C:
De la misma forma que la operacin anterior se puede crear la siguiente macro:
ChDrive C
MsgBox Ubicacion de archivo: & CurDir
Tambin se puede crear el botn de comando de controles Activex y seguir el mismo
proceso del ejemplo anterior.
3. BORRAR UN ARCHIVO
Se crea una macro con el siguiente cdigo VBA, especificando la ubicacin exacta en el
que se encuentra el archivo. Luego se ejecuta y el archivo con la ruta especificada ser
eliminado.
Kill D:PUCPCURSO MACROSNueva carpetaclase2.xlsx
4. CREAR UNA CARPETA
- Para crear una carpeta en la ubicacin actual en la que se encuentra el archivo Excel se
sigue el siguiente cdigo en VBA en macros.
MkDir Ricard
- Para crear una nueva carpeta en una ubicacin especfica, se crea el siguiente macro.
MkDir D:PUCPCURSO MACROSNueva Carpeta
y luego se ejecuta.
5. COPIAR UN ARCHIVO A OTRA CARPETA
Para copiar un archivo Excel a otra carpeta que se encuentra en un disco distinto a su
ubicacin actual se ejecuta una macro con el siguiente cdigo VBA.
FileCopy D:PUCPCURSO MACROSClase_2b.xlsm, E:TSW
Elaborado por: Ricardo Najarro Chuchn
Ejemplos de operaciones bsicas



Como enviar un archivo a un servidor FTP en VB.Net
lunes, 21 de junio de 2010
Categoria: FTP
El asunto es este: nos encargan una aplicacion o un modulo, dentro de nuestro sistema
principal, en la cual se pueda enviar y recepcionar archivos (documentos o lo que sea) en la
cuales se contiene informacion importante para la empresa para uno o varios usuarios a los
cuales ira dirigido justamente el archivo. Para esto tendra en cuenta lo sieguiente:

* Contar con una PC o Servidor FTP donde se almacenaran y se tendran acceso desde
cualquier punto del planeta y en cualquier momento a los archivos.
* Contar con los campos adecuados en una tabla de nuestra BD que indique el codigo del
usuario, nombre del archivo (ejemplo.doc) etc.
* Contar con una buena linea de internet

Ojo que aca ya no voy a detallar que codigo utilizar en vb.net y en SQL Server para
guardar los parametros en la BD de los campos mencionados, porque eso estara definido
por cada programador, solo mostrare un ejemplo de como enviar un archivo del FTP:

Codigo:

Donde OrigenArchivo podria ser "c:\ejemplo.doc" y NombreArchivo podria ser
"Archiv0_0001.doc", pues yo les recomiendo usar un correlativo al momento de asignar el
nombre al archivo en el server FTP ya que podria ocacionar error si el enviamos con un
nombre que de un archivo que ya existe en la carpeta de destino creado en el server FTP, eh
ahi la importancia de guardar el datos del nombre (ejemplo.doc) para que cuando
recepcionemos o descarguemos el archivo se guarde en el disco local con el nombre
original.


Public Shared Sub EnviarArchivoFTP(ByVal OrigenArchivo As String, ByVal NombreArchivo As
String)
Dim clsRequest As System.Net.FtpWebRequest
Dim conexion As Net.Sockets.TcpClient
clsRequest =
DirectCast(System.Net.WebRequest.Create("ftp://xxx.xx.xxx.xxx/archivos/NombreArchivo),
System.Net.FtpWebRequest)
clsRequest.Proxy = Nothing ' Esta asignacin es importantisimo con los que trabajen en windows
XP ya que por defecto esta propiedad esta para ser asignado a un servidor http lo cual ocacionaria
un error si deseamos conectarnos con un FTP, en windows Vista y el Seven no tube este problema.
clsRequest.Credentials = New System.Net.NetworkCredential("usuario", "password") ' Usuario y
password de acceso al server FTP, si no tubiese, dejar entre comillas, osea ""
clsRequest.Method = System.Net.WebRequestMethods.Ftp.UploadFile
Try
Dim bFile() As Byte = System.IO.File.ReadAllBytes(origenArchivo)
Dim clsStream As System.IO.Stream = _
clsRequest.GetRequestStream()
clsStream.Write(bFile, 0, bFile.Length)
clsStream.Close()
clsStream.Dispose()
Catch ex As Exception
MsgBox(ex.Message & ". El Archivo no pudo ser enviado, intente en otro momento")
End Try
End Sub


Instrucciones
1. 1
Inicia Microsoft Visual Basic Express. Haz clic en "Nuevo proyecto..." en el panel
izquierdo de la pantalla y, a continuacin, selecciona "Aplicacin de formularios de
Windows". Haz clic en "Aceptar".
2. 2
Haz doble clic en "Timer" en el panel "Herramientas" para agregar un nuevo control
de temporizador. Haz clic en "Timer1" y, a continuacin, selecciona "Propiedades".
Junto a "Habilitado", selecciona "Verdadero". Haz doble clic en "Timer1" para abrir
la ventana de "Form1.vb".
3. 3
Escribe el siguiente cdigo por encima de "Timer1_Tick" para declarar la funcin
de "GetAsyncKeystate": Public Declare Function GetAsyncKeyState Lib
"user32.dll" (ByVal vKey As Int32) As UShort
4. 4
Escribe el siguiente cdigo bajo "Timer1_Tick" para capturar las teclas pulsadas
mientras se ejecuta la aplicacin: Dim keyResult As Integer Dim chrKey As String
Dim i As Integer For i = 2 To 90 keyResult = 0 keyResult = GetAsyncKeystate(i) If
keyResult = -32767 Then chrKey = Chr(i) MsgBox(chrKey) Exit For End If Next i
5. 5
Presiona "F5" para ejecutar el programa, luego presiona "B" en el teclado y vers un
recuadro de mensaje que se muestra con la letra "B".


FTP upload con vb.net FtpWebRequest
by Pablo Cornehl 12/02/2012
Si bien vb.net ya trae una clase de ftp para uso simple aveces no es lo suficientemente
poderosa o no alcanza nuestros requerimientos para lo que deseamos hacer.
Muchas veces se desea tener una barra de progreso para conocer cuanto le queda a nuestra
descarga o subida para terminar y es algo complicado para el usuario no experimentado.
Ms all de eso vb.net permite de forma sencilla mostrar el progreso de nuestras subidas
habilitando la interfaz ui del mtodo UploadFile.
1
My.Computer.Network.UploadFile("C:\readme.txt",
"ftp://ftp.server.com",New NetworkCredential(Username, Password), true)
Como se puede observar el cuarto argumento del mtodo corresponde a habilitar o no la
interfaz de carga donde se muestra el nombre de archivo que se esta subiendo, una barra de
progreso y el botn cancelar. Lamentablemente no se puede tener acceso a esos controles
para modificarlos y obtener informacin de ellos por lo que estamos muy limitados.
Con FtpWebRequest las cosas se puede hacer un poco ms modulares dado que tenemos
total control sobre lo que enviamos y de la forma en la que lo enviamos, pero tambin las
cosas se pueden complicar un poco.
1
2
Dim request As FtpWebRequest = WebRequest.Create(New
Uri("ftp://ftp.server.com/readme.txt"))
request.Method = WebRequestMethods.Ftp.UploadFile
3
request.Credentials = New NetworkCredential("username", "password")
Lo primero que hacemos es iniciar la clase y crear un request a la url provista. Si bien
puede ser un string simple siempre es recomendado pasar un uri para asegurarnos que es
valido si es que un usuario lo ah introducido manualmente.
Note que la url contiene el nombre de archivo que se va a subir, de esta manera se le indica
al servidor sobre que archivo deseamos trabajar.
Por ultimo se indica el mtodo de conexin y las credenciales que albergan el nombre de
usuario y la contrasea para conectarse.
1
2
3
4
Dim fileStream() As Byte = System.IO.File.ReadAllBytes("C:\readme.txt")

Dim requestStream As System.IO.Stream = request.GetRequestStream()
requestStream.Write(fileStream, 0, fileStream.Length)
Una vez conectados lo que necesitamos es leer todos los bytes del archivo que deseamos
subir y enviarlos a travs del stream de transmisin.
Enviar los archivos de esta manera en vez de usando el mtodo UploadFile de la clase
Network nos permite poder controlar la subida de forma mas eficiente y as en un futuro
enviar los datos en paquetes de bytes para medir el progreso e inclusive la velocidad de
transmisin y tiempo estimado de subida.
1
2
requestStream.Close()
requestStream.Dispose()
Y finalmente le decimos al garbage collector que ya no usaremos el stream de datos y
liberamos la memoria utilizada.
Nuestro cdigo final queda as:
01
02
03
04
Dim request As FtpWebRequest = WebRequest.Create(New
Uri("ftp://ftp.server.com/readme.txt"))
request.Method = WebRequestMethods.Ftp.UploadFile
request.Credentials = New NetworkCredential("username", "password")

05
06
07
08
09
10
11
Dim fileStream() As Byte = System.IO.File.ReadAllBytes("C:\readme.txt")

Dim requestStream As System.IO.Stream = request.GetRequestStream()
requestStream.Write(fileStream, 0, fileStream.Length)

requestStream.Close()
requestStream.Dispose()



Abrir, Editar Y Guardar Un TextBox A Un
Fichero TxT [Vb.Net]
Publicado el 31 octubre, 2011 por Luis Bautista
Bueno Ahora Un ejemplo Para Abrir Un Archivo Editarlo Guardarlo.
Primero Que Nada Necesitamos Los Siguientes Controles:
3 Buttons
o 1 Button Donde Buscaremos El Fichero TXT A Abrir
o 1 Button Para guardar Los Cambios Hechos En El Fichero
o 1 Button Para Guardar Un Nuevo Fichero
1 Label
o 1 Label Para Almacenar La Ruta Del Fichero
1 Textbox
o 1 TextBox Donde Nos Mostrara El Contenido Del Fichero Y Podremos
Editar
1 OpenFileDialog
o 1 OpenFileDialog Nos Mostrara Un Cuadro De Dialogo Donde Buscaremos
Y Seleccionaremos El Fichero
1 SaveFileDialog
o 1 SaveFileDialog Nos mostrara Un Cuadro De Dialogo Donde Buscaremos
La Direccin Donde Deseamos Guardar El Fichero.
Haremos Un Diseo Algo Parececido Asi:

Espero Que Les Guste Mi Modelo!! :D
El Cdigo Fuente:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
Imports System.IO
Public Class Form1
Private Sub Button1_Click(ByVal sender As System.Object, ByVal e As
System.EventArgs) Handles Button1.Click
With OpenFileDialog1
.Filter = "Ficheros de texto (*.txt)|*.txt"
If .ShowDialog = Windows.Forms.DialogResult.OK Then
Label1.Text = OpenFileDialog1.FileName
TextBox1.Text = AbrirArchivo(Label1.Text)
End If
End With
End Sub
Public Function AbrirArchivo(ByVal Ruta As String)
Dim objReader As New StreamReader(Ruta)
Dim sLine As String = ""
Dim Texto As String = ""
Dim arrText As New ArrayList()
Do
sLine = objReader.ReadLine()
If Not sLine Is Nothing Then
arrText.Add(sLine + vbCrLf)
End If
Loop Until sLine Is Nothing
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
objReader.Close()
For Each sLine In arrText
Texto += sLine
Next
Return Texto
End Function

Private Sub Button3_Click(ByVal sender As System.Object, ByVal e As
System.EventArgs) Handles Button3.Click
If Not Len(TextBox1.Text) = 0 Then
With SaveFileDialog1
.Reset()
.Filter = "Ficheros de texto (*.txt)|*.txt"
If .ShowDialog = Windows.Forms.DialogResult.OK Then
If My.Computer.FileSystem.FileExists(.FileName) Then
My.Computer.FileSystem.DeleteFile(.FileName)
My.Computer.FileSystem.WriteAllText(.FileName, TextBox1.Text & vbCrLf,
True)
Else
My.Computer.FileSystem.WriteAllText(.FileName, TextBox1.Text & vbCrLf,
True)
End If
Label1.Text = .FileName
End If
End With
End If
End Sub

Private Sub Button2_Click(ByVal sender As System.Object, ByVal e As
System.EventArgs) Handles Button2.Click
If Not Len(Label1.Text) = 0 Then
'Para Guardar Una Manera Sencilla Es Eliminar Y Crearlo
' Lo Eliminamos
My.Computer.FileSystem.DeleteFile(Label1.Text)
' Lo Creamos
My.Computer.FileSystem.WriteAllText(Label1.Text, TextBox1.Text &
vbCrLf, True)
End If
End Sub
End Class
Video De Muestra:
Ahora Pueden Comentar y Sugerir Mas Ejemplos Espero Que Les Haya Servido En Algo !

Deteccin de la insercin de unidades de disco extrables con .NET
Martes, 5 junio, 2007 Antonius
Para los aficionados al desarrollo de aplicaciones con .NET y C#, aqu voy a dejar un trozo
de cdigo muy interesante.
Bsicamente consiste en un mtodo para notificar a una aplicacin de que se ha insertado
un nuevo disco en el sistema (un CD, DVD, llave USB, tarjeta de memoria SD/MMC/etc,
Disco duro externo, ), un mtodo para identificar la letra de la nueva unidad, y a partir de
ellos construir las aplicaciones que se nos ocurran que puedan aprovecharse de esta
funcionalidad.
1
2
3
4
5
6
7
8
9
1
0
1
1
1
2
1
3
1
4
1
5
//Incluir esto es obligatorio
using System.Runtime.InteropServices;

/*
* Escribe aqu el cdigo de tu programa (O donde prefieras!)
*/

//Estructura de datos que almacena la gestin de conexiones

[StructLayout(LayoutKind.Sequential)]
public struct DEV_BROADCAST_VOLUME
{
public int dbcv_size;
public int dbcv_devicetype;
public int dbcv_reserved;
public int dbcv_unitmask;
}

//Mtodo a sobreescribir para gestionar la llegada de nuevas unidades
de disco
1
6
1
7
1
8
1
9
2
0
2
1
2
2
2
3
2
4
2
5
2
6
2
7
2
8
2
9
3
0
3
protected override void WndProc(ref Message m)
{
//Estas definiciones estn en dbt.h y winuser.h
//Se ha producido un cambio en los dispositivos
const int WM_DEVICECHANGE = 00219;
// El sistema detecta un nuevo dispositivo
const int DBT_DEVICEARRIVAL = 08000;
//Solicita retirada del dispositivo
const int DBT_DEVICEQUERYREMOVE = 08001;
//Ha fallado la retirada del dispositivo
const int DBT_DEVICEQUERYREMOVEFAILED = 08002;
//Pendiente extraccin del dispositivo
const int DBT_DEVICEREMOVEPENDING = 08003;
//Dispositivo extrado del sistema
const int DBT_DEVICEREMOVECOMPLETE = 08004;
// Volumen lgico (Se ha insertado un disco)
const int DBT_DEVTYP_VOLUME = 000000002;
switch (m.Msg)
{
//Cambian los dispositivos del sistema
case WM_DEVICECHANGE:
switch (m.WParam.ToInt32())
{
//Llegada de un dispositivo
case DBT_DEVICEARRIVAL:
{
int devType = Marshal.ReadInt32(m.LParam, 4);
//Si es un volumen lgico..(unidad de disco)
1
3
2
3
3
3
4
3
5
3
6
3
7
3
8
3
9
4
0
4
1
4
2
4
3
4
4
4
5
4
6
if (devType == DBT_DEVTYP_VOLUME)
{
DEV_BROADCAST_VOLUME vol;
vol = (DEV_BROADCAST_VOLUME)Marshal.PtrToStructure(
m.LParam, typeof(DEV_BROADCAST_VOLUME));
MessageBox.Show(
Insertada unida de disco, unidad: +
LetraUnidad(vol.dbcv_unitmask));
}
}
break;
case DBT_DEVICEREMOVECOMPLETE:
MessageBox.Show(Dispositivo retirado.);
break;
}
break;
}
//Ahora usar el manejador predeterminado
base.WndProc(ref m);
}

//Mtodo para detectar la letra de unidad
char LetraUnidad(int unitmask)
{
char[] units ={ A, B, C, D, E, F, G,
H', I, J, K, L, M, N, O, P,
Q', R, S, T, U, V, W, X, Y, Z };
int i = 0;
4
7
4
8
4
9
5
0
5
1
5
2
5
3
5
4
5
5
5
6
5
7
5
8
5
9
6
0
6
1
6
//Convetimos la mscara en un array primario y buscamos
//el ndice de la primera ocurrencia (la letra de unidad)
System.Collections.BitArray ba = new
System.Collections.BitArray(System.BitConverter.GetBytes(unitma
sk));
foreach (bool var in ba)
{
if (var == true)
break;
i++;
}
return units[i];
}
2
6
3
6
4
6
5
6
6
6
7
6
8
6
9
7
0
7
1
7
2
7
3
7
4
7
5
7
6
7
7
7
8
7
9
8
0
8
1
8
2
8
3
8
4
8
5
8
6
8
7
Aqu os dejo (correctamente formateada) la aportacin de Carolina, el cdigo en Visual
Basic para la deteccin de unidades:
1
2
3
4
5
6
7
Estructura de datos que almacena la gestin de conexiones
Public Structure dispositivo
Public dispTamao As Integer
Public dispTipo As Integer
Public dispReserv As Integer
Public dispMask As Integer
End Structure
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

Protected Overrides Sub WndProc(ByRef m As System.Windows.Forms.Message)

Se ha producido un cambio en los dispositivos
Const deviceChange As Integer = &H219
El sistema detecta un nuevo dispositivo
Const deviceArrival As Integer = &H8000
Solicita retirada del dispositivo
Const deviceQueryRemove As Integer = &H8001
Ha fallado la retirada del dispositivo
Const devideQueryRemoveFailed As Integer = &H8002
Pendiente extraccin del dispositivo
Const deviceRemovePending As Integer = &H8003
Dispositivo extrado del sistema
Const deviceRemoveComplete As Integer = &H8004
Volumen lgico (Se ha insertado un disco)
Const deviceTypeVolume As Integer = &H2

Select Case m.Msg
Cambian los dispositivos del sistema
Case deviceChange
Select Case m.WParam.ToInt32
Llegada de un dispositivo
Case deviceArrival
Dim devType As Integer = Marshal.ReadInt32(m.LParam, 4)
Si es un volumen lgico..(unidad de disco)
If devType = deviceTypeVolume Then
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
Dim vol As dispositivo
vol = CType(Marshal.PtrToStructure(m.LParam,
GetType(dispositivo)), dispositivo)
MessageBox.Show(Se insert un dispositivo en la unidad &
LetraUnidad(vol.dispMask) & .)
ACA HAGO EL TRATAMIENTO DEL DISPOSITIVO INSERTADO
End If
Case deviceRemoveComplete
MessageBox.Show(Se retir el dispositivo.)
End Select
End Select

Ahora se usa el manejador predeterminado
MyBase.WndProc(m)
End Sub

Private Function LetraUnidad(ByVal unitmask As Integer) As Char
Dim units() As Char = {A, B, C, D, E, F, G,
H, I, J, K, L, M, N, O, P,
Q, R, S, T, U, V, W, X, Y, Z}
Dim i As Integer = 0
Convetimos la mscara en un array primario y buscamos
el ndice de la primera ocurrencia (la letra de unidad)
Dim ba As System.Collections.BitArray
ba = New
System.Collections.BitArray(System.BitConverter.GetBytes(unitmask))

For i = 0 To ba.Length
If ba(i) = True Then
58
59
60
61
62
63
64
65
66
Exit For
End If
Next

Return units(i)
End Function
About these ads
Share this:




Introduccin
En este artculo les explico como hacer una aplicacin que est corriendo en nuestro equipo
como un "servicio de windows", este software nos detectar cuando se conecte una
memoria USB a nuestro computador y determinar si est autorizada, si no lo est la
formatea sin pedir confirmacin.

IMPORTANTE:
POR FAVOR LEE ATENTAMENTE ESTE ARTCULO ANTES DE USAR EL CDIGO.

YA QUE SI LO USAS DE FORMA INADECUADA PUEDES PERDER INFORMACIN GRABADA
EN DISCOS (o memorias) USB.
Tal como se indica en el texto:
La comprobacin de si la memoria est o no autorizada para conectarse en nuestro
equipo lo hacemos evaluando si existe un archivo que llamaremos kill.dll

Contenido
En la empresa donde trabajo actualmente tenamos muchos problemas con los virus, ya que
algunos empleados (tal vez mal intencionados) conectaban memorias USB infectadas en los
computadores que tenemos en las sucursales, propagando de esa forma los virus, algunos
muy dainos, otros no tanto.
Luego de tratar de encontrar una solucin a dicha problemtica, decid crear un software
que slo permitiera que ciertas memorias USB autorizadas se pudiesen conectar a nuestros
equipos y si esta memoria no estaba "autorizada" sera formateada. Todo el cdigo ha sido
hecho por m, lo nico diferente que utilizo es una dll que descargu de Internet, la cual
sirve para colocar el icono de la aplicacin en el systray y mostrar un mensaje cuando la
memoria no est "autorizada" diciendo que la ha formateado... jejeje... Esta aplicacin esta
hecha en Visual Basic .NET 2008, pero debe funcionar para las versiones anteriores
Nota:
Amigos, este cdigo se los coloco, primero, porque considero que el sitio del Guille ha sido
de gran ayuda en mi carrera como Desarrollador en .NET y segundo porque he visto que
muchas personas estn buscando un cdigo parecido a este, les agradezco que utilicen este
cdigo slo para su seguridad y el de su compaa...

El cdigo:
Vamos a iniciar un nuevo proyecto del tipo Aplicacin de Windows, al formulario que se
crea slo le vamos a agregar un control de tipo Timer, lo llamar Temporizador. En la
clase del formulario colocaremos las siguientes declaraciones:
'Esta constante corresponde al valor del WParam del mensaje que se
envia a la forma cuando se minimiza
Private Const SC_MINIMIZE = &HF020&
'Esta variable nos coloca el icono en el systray y nos muestra los
mensajes correspondientes
Private Msg As New globoShell
'Para el tipo del disco
Private l_Tipo As String = As String Nothing
'Vector que tiene guardado las posibles unidades
Private Vector() As String = {"C", "D", "E", "F", "G", "H", "I"}
Utilizar un mtodo que nos va a permitir saber si nuestra aplicacin est en ejecucin, esto
lo hacemos para evitar que nuestra aplicacin se cargue ms de una vez. Este mtodo no
recibe ningn parmetro y retorna un booleano:
Public Function InstanciaPrev() As Boolean
If
UBound(Diagnostics.Process.GetProcessesByName(Diagnostics.Process.GetCurr
entProcess.ProcessName)) > 0 Then
Return True
Else
Return False
End If
End Function
En el Load del Formulario colocaremos el siguiente cdigo, primero preguntaremos si ya
se est ejecutando la aplicacin, luego preguntaremos si tenemos un acceso directo de
nuestra aplicacin en la carpeta inicio, esto es para que cada vez que un usuario inicie
sesin en nuestro equipo la aplicacin comience automticamente, minimizamos nuestra
aplicacin, no permitimos que se muestre en la barra de tareas, mandamos el formulario al
systray y habilitamos el temporizador... Por cierto, nuestra aplicacin la llamaremos
Daemon y nuestro formulario Frm_BorradoUSB:
'Evaluamos que no est cargada la aplicacin
If InstanciaPrev() Then
'Cerramos la nueva aplicacin
Application.Exit()
End If
'Evaluaremos si no se encuentra el acceso directo a nuestra
aplicacin en la carpeta inicio
If Not File.Exists("C:\Documents and Settings\All Users\Men
Inicio\Programas\Inicio\Daemon.exe.lnk") Then
'Creamos el acceso directo
Dim ob As Object = CreateObject("WScript.Shell")
Dim vlnk As Object
vlnk = ob.CreateShortcut & _
("C:\Documents and Settings\All Users\Men
Inicio\Programas\Inicio\Daemon.exe.lnk")
'Buscamos nuestro .exe, puede estar en cualquier carpeta
vlnk.Targetpath = Application.StartupPath & "\Daemon.exe"
vlnk.Save()
End If
'Minimizamos la ventana
WindowState = FormWindowState.Minimized
'No permitimos que aparezca en la barra de herramientas
ShowInTaskbar = False
'Adicionamos el icono en el systray
Msg.AddIcon( Me )
'Habilitamos el temporizador
Temporizador.Enabled = True
Utilizar una propiedad llamada Tipo que nos retornar el tipo de disco que se encuentra
conectado a nuestro computador, tenga en cuenta que las memorias USB siempre son de
tipo USB:
Public Property Tipo() As String
Get
Return l_Tipo
End Get
Set(ByVal value As String)
l_Tipo = value
End Set
End Property
Al timer utilizado le coloqu un intervalo por defecto de 1000 milisegundos (un segundo),
esto quiere decir que el software cada segundo estar buscando si tenemos una memoria
USB conectada. Ahora, en el evento Tick del Timer colocaremos el siguiente cdigo:
'Determinamos los discos que tenemos
Dim DatosHDD As New ManagementObjectSearcher("SELECT * FROM
Win32_DiskDrive")
'Recorremos todos los discos conectados para ver cuales son de tipo
USB
For Each DskWmi As ManagementObject In DatosHDD.[Get]()
Dim Dsk As New Frm_BorradoUSB
Dsk.Tipo = DskWmi("InterfaceType").ToString()
If Dsk.Tipo = "USB" Then
'Ejecutamos el mtodo que nos verifica si es una memoria
autorizada
Ejecutar()
End If
Next
Crearemos un mtodo que se llamar Ejecutar el cual nos determinar si la memoria USB
est autorizada o no, si no lo est llamar a otro mtodo que se encargar de formatear la
USB. La comprobacin de si la memoria est o no autorizada para conectarse en nuestro
equipo lo hacemos evaluando si existe un archivo que llamaremos kill.dll:
Private Sub Ejecutar()
'Deshabilitamos temporalmente el timer
Temporizador.Enabled = False
'Variable que guarda la unidad de la memoria
Dim U As String = Unidad()
'Obtenemos los subdirectorios y los archivos localizados en la
carpeta raz de la memoria
Dim strDir2() As String
Dim strFlies2() As String
strDir2 = System.IO.Directory.GetDirectories(U & ":\", "*.*")
strFlies2 = System.IO.Directory.GetFiles(U & ":\", "*.*")
'Evaluamos si la memoria est autorizada
If Not File.Exists(U & ":\kill.dll") Then
'La memoria no est autorizada, pero evaluamos si est vaca
If strDir2.Length > 0 Or strFlies2.Length > 0 Then
'Mostramos el mensaje de formateo
Msg.WNotification("HAS CONECTADO UNA MEMORIA USB COMO DISCO "
& U & ":\ FORMATEANDO MEMORIA...")
'Borramos los datos
BorrarDatos(U)
'Mostramos el mensaje de que se ha formateado correctamente
Msg.WNotification("MEMORIA USB FORMATEADA CORRECTAMENTE!!!")
End If
Else
If Not Temporizador.Interval = 1000 Then
Temporizador.Interval = 1000
End If
End If
'Habilitamos nuevamente el timer
Temporizador.Enabled = True
End Sub
El siguiente mtodo formatear completamente la memoria, le enviamos como parmetro la
ruta de la memoria, se utilizar un archivo txt para que al momento de formatear no se nos
pida confirmacin, luego crearemos un .bat que formatear la unidad y por ltimo
ejecutaremos este .bat...
Nota:
Amigos, no utilicen este cdigo para hacer cosas indebidas, confo en que le van a dar un
uso adecuado...
Private Sub BorrarDatos(ByVal sourceDir As String)
Temporizador.Interval = 10000
'Asignamos la ruta del .txt que llamaremos intro
Dim ruta As String = "C:\Windows\System32\intro.txt"
'Preguntamos si no existe el .txt
If Not File.Exists(ruta) Then
'Abrimos el archivo para escribir
Dim x As New StreamWriter(ruta)
'Introducimos los datos necesarios en el documento
x.WriteLine("S")
x.WriteLine("")
x.WriteLine("")
'Cerramos el archivo
x.Close()
End If
ruta = "C:\Windows\System32\format.bat"
'Preguntamos si existe la ruta especficada
If File.Exists(ruta) Then
'Borramos el archivo
File.Delete(ruta)
End If
'Creamos nuevamente el archivo
Dim bat As New StreamWriter(ruta)
'Introducimos los datos necesarios en el documento
bat.Write("FORMAT " & sourceDir & ": <
C:\Windows\System32\intro.txt")
'Cerramos el archivo
bat.Close()
'Ejecutamos el .bat
Shell(ruta)
End Sub
Por ltimo tendremos un mtodo que es el que nos va a determinar en que unidad est
conectada la memoria, nos retornar un string:
Private Function Unidad() As String
'Variable que se va a retornar
Dim mem As String = Vector(6)
'Variable que ir decrementando los tems del vector
Dim i As Integer = 6
'El ciclo funciona hasta que encuentra una unidad conectada
While Not Directory.Exists(mem & ":\")
i = i - 1
mem = Vector(i)
End While
'Retornamos la unidad de la memoria
Return mem
End Function

Espero que este cdigo les haya sido de gran utilidad, si tienen alguna duda o sugerencia
me pueden escribir al mail... Esta aplicacin la tenemos en los equipos de nuestra empresa
y se han acabado los problemas que tenamos con los virus.


Espacios de nombres usados en el cdigo de este artculo:
System.IO
System.Management
System.Runtime.InteropServices
dllGlobos


Private Sub Form_Load()
On Error Resume Next

Dim El_Objeto As Object
Set El_Objeto = CreateObject("WScript.Shell")

Resultado = El_Objeto.RegRead("HKEY_LOCAL_MACHINE\SOFTWARE\Mic
rosoft\Windows\CurrentVersion\Run\nombrejecutable" ) 'nombrejecutable deve ser el nombre
que recivira el ejecutable

If Resultado = "" Then
If MsgBox("La Aplicacion no se inicia automaticamente al arrancar Windows. Desea que de ahora
en adelante se inicie automaticamente ?", vbYesNo + vbQuestion, Me.Caption) = vbYes Then
El_Objeto.RegWrite "HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows\Cur
rentVersion\Run\nombrejecutable", App.Path & "\" & App.EXEName & ".exe" 'lo mismo con
nombrejecutable
MsgBox "Listo. De ahora en adelante la Aplicacion inicia automaticamente al arrancar Windows",
vbOKOnly + vbInformation, Me.Caption
End If
End If
Set El_Objeto = Nothing
End Sub



Poner nuestra aplicacin en el
registro de Windows para que se
inicie automticamente


Publicado el 04/Feb/2004
Actualizado el 07/Oct/2004
Autor: Guillermo 'guille' Som

Como seguramente sabrs, (y si no lo sabes, a partir de ahora ya lo sabes),
entre las clases de .NET Framework se incluyen un grupos de clases que
nos permiten manejar el registro de Windows.
Entre las cosas que podemos hacer, est lo que te voy a explicar aqu:
Poner (y quitar) nuestra aplicacin en el registro de Windows para que se
inicie de forma automtica.
Para lograr esto, tendremos que aadir en la clave:
HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows\CurrentVersion\Run
una entrada con el nombre de la aplicacin (o lo que queramos poner para
identificar nuestro ejecutable) y el path de lo que queremos que se ejecute
al iniciarse el sistema operativo, bueno, realmente se ejecutar al abrir la
sesin de un usuario.

Las clases para manejar el registro del sistema estn en el espacio de nombres
Microsoft.Win32, en ese espacio de nombres tenemos dos clases que son las que nos
permitirn acceder al registro de Windows:
Registry, que contiene mtodos estticos (compartidos en VB) que nos permitirn
acceder a las distintas claves del registro, como LocalMachine, que es la que en este
ejemplo usaremos, adems de las otras claves base o grupos de claves.
Si quieres saber qu otras claves se pueden usar (y su utilidad), puedes mirar esta
entrada en la ayuda de Visual Studio .NET:
ms-
help://MS.MSDNQTR.2003FEB.3082/cpref/html/frlrfmicrosoftwin32registrymemberstop
ic.htm
o esta otra en Internet, aunque en ingls:
http://msdn.microsoft.com/library/en-
us/cpref/html/frlrfmicrosoftwin32registrymemberstopic.asp
y esta en espaol:
http://msdn.microsoft.com/library/spa/cpref/html/frlrfmicrosoftwin32registrymemberst
opic.asp
Mediante los mtodos estticos de la clase Registry podremos acceder a los mtodos
que nos permitirn hacer las manipulaciones pertinentes. Por ejemplo, podemos usar
el mtodo OpenSubKey para abrir una clave y posteriormente aadir una nueva
entrada o para leer una existente.
En este ejemplo usaremos OpenSubKey para abrir la clave, este mtodo devuelve un
objeto del tipo RegistryKey que representa la subclave a la que queremos acceder.
Con el valor devuelto podremos hacer las operaciones de manejo de los valores, en
este ejemplo en particular usaremos los tres ms habituales:
GetValue, que nos permitir recuperar el valor de una clave.
SetValue, que asignar un nuevo valor en una clave (o cambiar el que ya hubiera).
DeleteValue, que eliminar el valor de la clave indicada.
Aunque con esa misma clase tambin podremos acceder a otra informacin, como el
nmero de subclaves o un array con los valores o las subclaves de la clave indicada.
Para ms informacin sobre la clase RegistryKey y los miembros de esa clase... como
es habitual, en la documentacin de Visual Studio .NET:
ms-
help://MS.MSDNQTR.2003FEB.3082/cpref/html/frlrfmicrosoftwin32registrykeyclasstopi
c.htm
Ahora pasemos a ver el cdigo de la aplicacin de ejemplo, en este proyecto de lnea
de comandos, podremos indicar la clave y el valor que queremos asignar, eliminar o
recuperar. Para ello indicaremos como primer parmetro la accin a realizar: /A
(asignar), /R (recuperar), /E (eliminar), a continuacin indicaremos la clave (dentro de
Inicio) que queremos manipular y, en caso de querer asignar un nuevo valor (o
cambiar uno existente), en el ltimo parmetro indicaremos el valor que queremos
asignar.
En el caso de que usemos valores o claves con espacios, stos se indicarn dentro de
comillas dobles, ya que los parmetros de la lnea de comandos se interpretan como
valores diferentes los que estn separados por espacios.
Un poco ms abajo tienes el cdigo tanto para Visual Basic .NET como para C#.
No incluyo ningn proyecto ya que no hace falta, incluso podras compilar el cdigo
usando la lnea de comandos, simplemente usando el compilador del lenguaje que
elijas (vbc o csc) seguido del nombre del fichero en el que hayas guardado el cdigo
que te muestro.
Espero que te sea de utilidad.
Nos vemos.
Guillermo
P.S.
Pulsa aqu, si quieres saber cmo hacer esto mismo pero en Visual Basic 6.0

El cdigo para VB .NET
'------------------------------------------------------------------------
------
' registroWindowsInicioVB
(04/Feb/04)
' Poner nuestra aplicacin en el registro para que se inicie
automticamente
' tambin se comprobar si ya est y cmo quiitarla.
'
' Guillermo 'guille' Som, 2004
'------------------------------------------------------------------------
------
Option Strict On

Imports Microsoft.VisualBasic
Imports System
Imports Microsoft.Win32

Module Module1
Sub Main(ByVal args() As String)
' En la lnea de comandos se indicar la clave y el valor
' El valor ser el "path" completo de la aplicacin
' que queremos incluir en el registro dentro de la clave indicada
' En el primer parmetro indicaremos la accin a realizar:
' /A Aadir o modificar una clave
' /E Eliminar la clave indicada
' /R Recuperar el valor de la clave indicada, tambin se puede
usar /M
' Recuerda que en este cdigo siempre se manejar la clave Run:
'
HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows\CurrentVersion\Run
'
Dim msg As String = String.Format("Para usar esta aplicacin
debes indicar:{0}" & _
"Para aadir o modificar: /A clave path{0}" &
_
"Para eliminar: /E clave{0}" & _
"Para mostrar el valor: /R clave o /M
clave", vbCrLf)
If args.Length < 2 Then
Console.WriteLine(msg)
Exit Sub
End If
'
Dim nombre As String = args(1)
Select Case args(0).ToUpper
Case "/A", "-A"
' si hay menos de tres argumentos
' es que no se ha indicado el ltimo parmetro
If args.Length < 3 Then
Console.WriteLine(msg)
Exit Sub
End If
Dim valor As String = args(2)
If ponerEnInicio(nombre, valor) Then
Console.WriteLine("Se aadi / modific correctamente
la clave...")
End If
Case "/E", "-E"
If quitarDeInicio(nombre) Then
Console.WriteLine("Se quit correctamente la
clave...")
End If
Case "/R", "-R", "/M", "-M"
Console.WriteLine(comprobarEnInicio(nombre))
End Select
End Sub
'
Private Function ponerEnInicio(ByVal nombreClave As String, ByVal
nombreApp As String) As Boolean
' Resgistrar en Inicio del registro la aplicacin indicada
' Devuelve True si todo fue bien, False en caso contrario
'
' Guardar la clave en el registro
'
HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows\CurrentVersion\Run
Try
Dim runK As RegistryKey =
Registry.LocalMachine.OpenSubKey("Software\Microsoft\Windows\CurrentVersi
on\Run", True)
' aadirlo al registro
' Si el path contiene espacios se debera incluir entre
comillas dobles
If nombreApp.StartsWith(ChrW(34)) = False AndAlso
nombreApp.IndexOf(" ") > -1 Then
nombreApp = ChrW(34) & nombreApp & ChrW(34)
End If
runK.SetValue(nombreClave, nombreApp)
Return True
Catch ex As Exception
Console.WriteLine("ERROR al guardar en el
registro.{0}Seguramente no tienes privilegios suficientes.{0}{1}{0}---
xxx---{2}", vbCrLf, ex.Message, ex.StackTrace)
Return False
End Try
End Function
'
Private Function quitarDeInicio(ByVal nombreClave As String) As
Boolean
' Quitar de Inicio la aplicacin indicada
' Devuelve True si todo fue bien, False en caso contrario
' Si la aplicacin no estaba en Inicio, devuelve True salvo que
se produzca un error
'
Try
Dim runK As RegistryKey =
Registry.LocalMachine.OpenSubKey("Software\Microsoft\Windows\CurrentVersi
on\Run", True)
' quitar la clave indicada del registo
runK.DeleteValue(nombreClave, False)
Return True
Catch ex As Exception
Console.WriteLine("ERROR al eliminar la clave del
registro.{0}Seguramente no tienes privilegios suficientes.{0}{1}{0}---
xxx---{2}", vbCrLf, ex.Message, ex.StackTrace)
Return False
End Try
'
End Function
'
Private Function comprobarEnInicio(ByVal nombreClave As String) As
String
' Comprobar si la clave indicada est asignada en Inicio
' en caso de ser as devolver el contenido,
' en caso contrario devolver una cadena vacia
' Si se produce un error, se devolver la cadena de error
Try
Dim runK As RegistryKey =
Registry.LocalMachine.OpenSubKey("Software\Microsoft\Windows\CurrentVersi
on\Run", False)
' comprobar si est
Return runK.GetValue(nombreClave, "").ToString
Catch ex As Exception
Return String.Format("ERROR al leer el valor de la clave del
registro.{0}Seguramente no tienes privilegios suficientes.{0}{1}{0}---
xxx---{2}", vbCrLf, ex.Message, ex.StackTrace)
End Try
End Function
End Module


32 - Iniciar programa con windows
Volver - Anterior - Siguiente



Ejemplo en visual basic.net que usa la clase registry para poder establecer
la ruta del exe en el registro y poder iniciar junto al sistema para el
usuario actual
CreateSubKey y OpenSubKey : Para acceder a la clave en la rama :
SOFTWARE\Microsoft\Windows\CurrentVersion\Run y poder eliminar o crear la ruta
SetValue : Establece el nuevo valor
DeleteValue : Elimina la entrada
Application.ExecutablePath : para obtener la ruta y nombre del Exe
Application.ProductName : Para el nombre del programa

Iniciar un nuevo proyecto Windows form , agregar dos controles Button al Form1.
Pegar el Cdigo fuente:
Texto planoImprimir
1. Option Explicit On
2. Option Strict On
3.
4. Imports Microsoft
5. Imports Microsoft.Win32
6. Imports Microsoft.Win32.Registry
7.
8. Public Class Form1
9.
10. Private Function start_Up(ByVal bCrear As Boolean) As String
11.
12. ' clave del registro para
13. ' colocar el path del ejecutable para iniciar con windows
14. Const CLAVE As String = "SOFTWARE\Microsoft\Windows\CurrentVersion\Run"
15.
16. 'ProductName : el nombre del programa.
17. Dim subClave As String = Application.ProductName.ToString
18. ' Mensaje para retornar el resultado
19. Dim msg As String = ""
20.
21. Try
22. ' Abre la clave del usuario actual (CurrentUser) para poder extablecer el dato
23. ' si la clave CurrentVersion\Run no existe la crea
24. Dim Registro As RegistryKey = CurrentUser.CreateSubKey(CLAVE, RegistryKeyPermis
sionCheck.ReadWriteSubTree)
25.
26. With Registro
27.
28. .OpenSubKey(CLAVE, True)
29.
30. Select Case bCrear
31. ' Crear
32. ''''''''''''''''''''''
33. Case True
34. ' Escribe el path con SetValue
35. 'Valores : ProductName el nombre del programa y ExecutablePath : la ruta de
l exe
36. .SetValue(subClave, _
37. Application.ExecutablePath.ToString)
38. Return "Ok .. clave aadida"
39. ' Eliminar
40. ''''''''''''''''''''''
41. 'Elimina la entrada con DeleteValue
42. Case False
43. If .GetValue(subClave, "").ToString <> "" Then
44. .DeleteValue(subClave) ' eliminar
45. msg = "Ok .. clave eliminada"
46. Else
47.
48. msg = "No se elimin , por que el programa" & _
49. " no iniciaba con windows"
50. End If
51. End Select
52. End With
53. ' Error
54. ''''''''''''''''''''''
55. Catch ex As Exception
56. msg = ex.Message.ToString
57. End Try
58. 'retorno
59. Return msg
60. End Function
61.
62. Private Sub Button1_Click( _
63. ByVal sender As System.Object, _
64. ByVal e As System.EventArgs) Handles Button1.Click
65. ' crear
66. MsgBox(start_Up(True))
67. End Sub
68.
69. Private Sub Form1_Load( _
70. ByVal sender As System.Object, _
71. ByVal e As System.EventArgs) Handles MyBase.Load
72. Button1.Text = "Iniciar con win.."
73. Button2.Text = "No iniciar"
74. End Sub
75.
76. Private Sub Button2_Click( _
77. ByVal sender As System.Object, _
78. ByVal e As System.EventArgs) Handles Button2.Click
79.
80. 'Eliminar
81. MsgBox(start_Up(False))
82. End Sub
83. End Class



28/4/2009
Como leer y escribir en el Registro de Windows desde una aplicacin .NET
Para trabajar sobre el registro de Windows utilizaremos las cases Registry y RegistryKey del
Namespace Microsoft.Win32. Con stas 2 clases podremos realizar todas tareas de lectura y
escritura en el registro.
Este es un ejemplo muy sencillo, por lo tanto vamos a crear una clave Key, dentro crearemos un
valor Value luego los eliminaremos. Despus leeremos todos los Values que se encuentren en
HKLM\Microsoft\Windows\CurrentVersion\Run, que son los que indican qu aplicaciones
se ejecutan al iniciar Windows para todos los usuarios.

Debajo de estas lneas est el cdigo, uno de los ejemplos ms sencillos para leer y escribir en el
Registro de Windows.



Imports Microsoft.Win32
Public Class Form1

Private Sub Button1_Click(ByVal sender As System.Object, ByVal e As
System.EventArgs) Handles Button1.Click
CrearKey()
End Sub

Private Sub CrearKey()
Dim KeyPath As String = "Software\Test"
Registry.CurrentUser.CreateSubKey(KeyPath)
End Sub


Private Sub Button2_Click(ByVal sender As System.Object, ByVal e As
System.EventArgs) Handles Button2.Click
CrearValue()
End Sub

Private Sub CrearValue()
Dim KeyPath As String = "Software\Test"
Dim ValueName As String = "TestValue"

Dim key As RegistryKey = Registry.CurrentUser.OpenSubKey(KeyPath,
True) ' True indica que se abre para escritura
If key IsNot Nothing Then ' Si key es Nothing significa que no se
encontr
key.SetValue(ValueName, "Esto es una prueba",
RegistryValueKind.String)
Else
If MessageBox.Show(String.Format("No se encontr la clave
'HKCU\{0}'. Desea crearla?", KeyPath), "", MessageBoxButtons.YesNo,
MessageBoxIcon.Question) = Windows.Forms.DialogResult.Yes Then
CrearKey() ' Creamos la clave y volvemos a intentar crear
el valor
CrearValue()
End If
End If
End Sub


Private Sub Button3_Click(ByVal sender As System.Object, ByVal e As
System.EventArgs) Handles Button3.Click
EliminarValue()
End Sub

Private Sub EliminarValue()
Dim KeyPath As String = "Software\Test"
Dim ValueName As String = "TestValue"

Dim Key As RegistryKey = Registry.CurrentUser.OpenSubKey(KeyPath,
True)

If Key IsNot Nothing Then
If Key.GetValueNames().Contains(ValueName) Then ' Buscamos el
nombre del valor en la lista de todos los valores de la clave
Key.DeleteValue(ValueName) ' Borramos el valor
Else
MessageBox.Show(String.Format("No se encontr el valor
'{0}'.", ValueName))
End If
Else
MessageBox.Show(String.Format("No se encontr la clave
'HKCU\{0}'.", KeyPath))
End If
End Sub

Private Sub Button4_Click(ByVal sender As System.Object, ByVal e As
System.EventArgs) Handles Button4.Click
EliminarKey()
End Sub

Private Sub EliminarKey()
Dim KeyPath As String = "Software\Test"

Dim key As RegistryKey = Registry.CurrentUser.OpenSubKey(KeyPath)

If key IsNot Nothing Then
Registry.CurrentUser.DeleteSubKey(KeyPath) ' Borramos la sub
clave
Else
MessageBox.Show(String.Format("No se encontr la clave
'HKCU\{0}'.", KeyPath))
End If
End Sub


Private Sub Button5_Click(ByVal sender As System.Object, ByVal e As
System.EventArgs) Handles Button5.Click
LeerRegistro()
End Sub

Private Sub LeerRegistro()
Dim KeyPath As String =
"Software\Microsoft\Windows\CurrentVersion\Run"
Dim key As RegistryKey =
Registry.LocalMachine.OpenSubKey(KeyPath, False) ' Abrimos para slo
lectura

If key IsNot Nothing Then
Dim sb As New System.Text.StringBuilder()

Dim values As String() = key.GetValueNames() ' Obtenemos los
nombres de todos los valores en la key
For Each value As String In values
sb.AppendLine(String.Format("{0} > {1} ({2})", value,
key.GetValue(value), key.GetValueKind(value).ToString()))
Next

Me.TextBox1.Text = sb.ToString() ' Mostramos el resultado en
nuestra TextBox Multilnea
End If
End Sub
End Class






Para subir un fichero a un servidor mediante FTP, solo hay que usar una linea!!

Y la linea es........................................................................
My.Computer.Network.UploadFile("FicheroASubir",
"CarpetayNombreDelFicheroEnServidor", "UsuarioFTP", "ContraseaFTP", True o False,
500)

Donde True o False es si quieres mostrar una pantallita con el progreso de la subida.

500 es el TimeOut. (Tiempo de espera por si falla)

Notepad+- con java
JAN29
Post Info
Mouse
en 20:20
3 comentarios
Permalink

En este feriado de corpus christi que ya se acaba, aprenderemos a crear un sencillo notepad al
estilo de mouse, tendra funciones basicas (abrir/guardar) y la capacidad de trabajar con varios
documentos a la vez, a traves de pestaas como se ve en la imagen.

Se necesita:
Java
Netbeans 6.0
15 minutos de su tiempo
Proyecto
El proyecto comprende:


Comencemos:
1. Cree un nuevo proyecto "texto" en netbeas, aada un JFrame: textoform.java y aade un menu
(JMenubar) y sus respectivos Items, ademas aada un contendor JPanel y dentro de el un
JTabbedPane:JTP, debe tener algo como esto:


OJO: Fijese en los nombres de los objetos y coloquelos como en la imagen
2. crea una nueva clase textoclass.java, esta clase nos permitira manipular archivos de texto
(abrir/guardar) mediante una comoca ventana de dialogo (JFileChooser), el codigo que debes
colocar dentro es el siguiente:


package texto;
import java.io.BufferedReader;
import java.io.File;
import java.io.FileReader;
import java.io.FileWriter;
import java.io.PrintWriter;
import java.util.StringTokenizer;
import javax.swing.JFileChooser;
import javax.swing.JOptionPane;
import javax.swing.JTextArea;
import javax.swing.filechooser.FileNameExtensionFilter;
/**
* @web http://jc-mouse.blogspot.com/
* @author Mouse
*/
public class textoclass {
//para leer
File archivo = null;
FileReader fr = null;
BufferedReader br = null;
//para escribir
FileWriter fichero = null;
PrintWriter pw = null;
//ruta absoluta del archivo a manipular
String ruta = "";
//filtro
private static FileNameExtensionFilter filter = new
FileNameExtensionFilter("Archivo TXT","txt","TXT");

public textoclass(){
}

//abre un archivo de texto y lee el contenido linea por linea
private String OpenFile(String ruta){
String t="";//contenido del archivo
try {
archivo = new File (ruta);
fr = new FileReader (archivo);
br = new BufferedReader(fr);
// Lectura del fichero linea por linea
String linea;
while((linea=br.readLine())!=null)
t = t + linea + "\n";
}
catch(Exception e){
e.printStackTrace();
}finally{
try{
if( null != fr ){
fr.close();
}
}catch (Exception e2){
e2.printStackTrace();
}
}
return t;
}

private void SaveFile(String t, String ruta){
//se separa el texto cada salto de linea
StringTokenizer st = new StringTokenizer(t,"\n");
try
{
fichero = new FileWriter(ruta);
pw = new PrintWriter(fichero);
//se guarda linea por linea en el archivo
while(st.hasMoreTokens()){
String line = st.nextToken();
pw.println(line);
}
} catch (Exception e) {
e.printStackTrace();
} finally {
try {
if (null != fichero)
fichero.close();
} catch (Exception e2) {
e2.printStackTrace();
}
}
}

//segun la opcion muestra en pantalla una ventana de dialogo
//para "abrir" o "guardar" un archivo
public String Dialog(String Opcion, JTextArea tArea){
String nombre_archivo="";
JFileChooser fileChooser = new JFileChooser();
fileChooser.setFileFilter(filter);
//ventana para "abrir un archivo", retorna FALSE si se abre
if (Opcion.equals("Open")){
int result = fileChooser.showOpenDialog(null);
if ( result == JFileChooser.APPROVE_OPTION ){
ruta =
fileChooser.getSelectedFile().getAbsolutePath();
nombre_archivo =
fileChooser.getSelectedFile().getName();
tArea.setText(OpenFile(ruta));
}
}
//ventana para guardar un archivo
else if (Opcion.equals("Save As")){
int result = fileChooser.showSaveDialog(null);
if ( result == JFileChooser.APPROVE_OPTION ){
ruta =
fileChooser.getSelectedFile().getAbsolutePath();
ruta = ruta + ".txt";
nombre_archivo =
fileChooser.getSelectedFile().getName();
SaveFile(tArea.getText() ,ruta);
JOptionPane.showMessageDialog(null,"archivo guardado
correctamente.");
}
}
//aqui no muestra ninguna ventana, guarda automaticamente el
archivo
//respecto a un archivo previamente abierto
else if(Opcion.equals("Save")){
SaveFile(tArea.getText() ,ruta);
JOptionPane.showMessageDialog(null,"archivo actualizado.");
}
return nombre_archivo;
}
}

3. ahora cree una nueva clase JTabbedPane_op.java, esta clase es la encargada de crear nuevas
pestaas TABS en el JTabbedPane, asi como su respectivo jTextArea, asi mismo esta clase hace uso
de la clase file.java que crearemos mas tarde, esta clase JTabbedPane_op, utiliza vectores para
controlar y almacenar las diferenntes pestaas que se crearan, el codigo es:

package texto;
import java.util.Vector;
import javax.swing.JScrollPane;
import javax.swing.JTabbedPane;
import javax.swing.JTextArea;
/**
* @web http://jc-mouse.blogspot.com/
* @author Mouse
*/
public class JTabbedPane_op {
//vector para almacenar objetos jtextarea
private Vector vjta = new Vector(10,2);
//vector para almacenar objetos tipo file
private Vector vfile = new Vector(10,2);
//objetos
JTextArea jta;
JScrollPane scrollPane;

public JTabbedPane_op(){}

//crea un nuevo TAB en el JTabbedPane junto a un textarea
public void nuevo(JTabbedPane jtp){
//se crea una nueva instancia de jTextArea
jta = new JTextArea(8,25);
//se crean las barras de desplazamiento y se aade el jtextarea
scrollPane = new JScrollPane(jta,
JScrollPane.VERTICAL_SCROLLBAR_ALWAYS,
JScrollPane.HORIZONTAL_SCROLLBAR_NEVER);
//se aade el objeto jtextarea al vector
vjta.add(jta);
vfile.add(new file());
//se optiene la cantidad de tabs que existen
int i = jtp.getComponentCount();
jta.setText("http://jc-mouse.blogspot.com/");
//se aade los objetos al tabs
jtp.add(scrollPane, i);
jtp.setTitleAt(i, "nuevo documento");
}
//obtiene los datos de un jtextarea del tabs actual
public String getdatos(JTabbedPane jtp){
int i = jtp.getSelectedIndex();
JTextArea t = (JTextArea) vjta.elementAt(i);
return t.getText();
}
//retorna un jtextarea del TABS actual
public JTextArea getjTextArea(JTabbedPane jtp){
int i = jtp.getSelectedIndex();
JTextArea t = (JTextArea) vjta.elementAt(i);
return t;
}
//elimina un TABS junto a los demas objetos que le pertenecen
public void eliminar(JTabbedPane jtp){
int i = jtp.getSelectedIndex();
jtp.remove(i);
vjta.remove(i);
vfile.remove(i);
}
//retorna un boolean (true|false) si el contenido de una jtextarea ya
//fue guardado
public boolean fileisnew(JTabbedPane jtp){
file f = (file) vfile.elementAt(jtp.getSelectedIndex());
return f.isnew;
}
//cambia el estado isnew=false despues de que el archivo a sido
//guardado por primera vez
public void guardado(JTabbedPane jtp, String t){
file f = (file) vfile.elementAt(jtp.getSelectedIndex());
jtp.setTitleAt(jtp.getSelectedIndex(), t);
f.isnew=false;
}
}

4. por ultimo cree una nueva clase file.java, esta pequea clase nos ayuda con la gestion de los
archivos

package texto;
public class file {
boolean isnew=true;//condicion boolean
String ruta = "";//ruta del archivo
public file(){}
}

5. para terminar, tenemos que implementar las clases en la interfaz, esto no lo copies y pegues,
sino observa la forma de inplementacion:

/* se crean los objetos */
textoclass tc = new textoclass();
JTabbedPane_op op = new JTabbedPane_op();
String title = "Notepad+- by Mouse - file:[";


/* esto en el initComponents */
public textoform() {
initComponents();
this.setTitle(title + "]");
//crea un nuevo tabs junto a una hoja en blanco
op.nuevo(JTP);
}

/* implementacion de las acciones del menu */
private void smOpenActionPerformed(java.awt.event.ActionEvent evt) {
// Abre archivo de texto OPEN FILE
String n = tc.Dialog("Open",op.getjTextArea(JTP));
this.setTitle(title + tc.ruta + "]");
op.guardado(JTP,n);
}

private void smSaveAsActionPerformed(java.awt.event.ActionEvent evt) {
// Guarda en un nuevo archivo GUARDAR COMO...
String n = tc.Dialog("Save As", op.getjTextArea(JTP));
this.setTitle(title + tc.ruta+"]");
if (!n.equals("")){op.guardado(JTP,n);}
}

private void smSaveActionPerformed(java.awt.event.ActionEvent evt) {
// Guarda modificaciones echas a un archivo
//si es nuevo guarda como
if (op.fileisnew(JTP)) {
String n = tc.Dialog("Save As", op.getjTextArea(JTP));
this.setTitle(title + tc.ruta + "]");
if (!n.equals("")){op.guardado(JTP,n);}
}
else
{ //sino actualiza el archivo abierto
String n = tc.Dialog("Save", op.getjTextArea(JTP));
this.setTitle(title + tc.ruta+"]");
}
}

private void smNewActionPerformed(java.awt.event.ActionEvent evt) {
//crea un nuevo tabs junto a una hoja en blanco
op.nuevo(JTP);
}

private void smClosetabActionPerformed(java.awt.event.ActionEvent evt) {
//elimina un tabs
op.eliminar(JTP);
}

Ya tenemos nuestro notepad+- en java

Como siempre los codigos estan extracomentados y tambien te dejo el codigo fuente, cualquier
duda o bugs que se encuentre, preguntar y avisar

You might also like