como puedo modificar un archivo Host desde un programa ?

Iniciado por luis456, 10 Agosto 2014, 21:35 PM

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

luis456

Tengo un pequeño problema cada ves que quiero modificar este archivo y es que tengo que ir a windos sisten eceteraaaaaa... abrir el archivo con el blog de notas escribir cerrar y guardar,

el archivo host sirve para bloquear las paginas que quieras pero trate de hacerlo con los métodos tradicionales pero no me sale la idea es hacer un form un texbox donde escribo la pagina a bloquear

Ojo no quiero me lo hagan solo una orientación de que método puedo usar :) o por donde irían los tiros

luis

Que tu sabiduria no sea motivo de Humillacion para los demas

xustyx

Por que no te instalas notepad++  y dejas el archivo abierto?

luis456

Cita de: xustyx en 10 Agosto 2014, 21:56 PM
Por que no te instalas notepad++  y dejas el archivo abierto?


Hola y gracias

pero ya lo resolví cree un icono en el escritorio con la ruta y listo ahora cada ves que lo quiero modificar lo llamo desde ese icono lo modifico y listo

tema cerrado

Luis
Que tu sabiduria no sea motivo de Humillacion para los demas

Eleкtro

#3
Te dejo aquí un regalito, esto lo escribí hoy, es la base con todos los métodos que puedas llegar a necesitar (añadir un mapeo, eliminarlo, desactivarlo, etc...),
la creación y el diseño de la interfaz gráfica sería cosa tuya, solo tendrías que instanciar esta Class y hacer que los elementos de la interfaz interactuasen con los métodos de éste.

Código (vbnet) [Seleccionar]
' ***********************************************************************
' Author           : Elektro
' Last Modified On : 08-11-2014
' ***********************************************************************
' <copyright file="HostsFile.vb" company="Elektro Studios">
'     Copyright (c) Elektro Studios. All rights reserved.
' </copyright>
' ***********************************************************************

#Region " Usage Examples "

'Public Class HostsFileTestClass
'
'    Private Sub HostsFileTestHandler() Handles MyBase.Shown
'
'        ' Instance the HostsFile Class.
'        Dim Hosts As New HostsFile()
'
'        ' Set a new mapping.
'        Dim Mapping As New HostsFile.MappingInfo
'        With Mapping
'            .HostName = "cuantodanio.es"
'            .IP = Hosts.LOCALHOST ' "127.0.0.1"
'            .Comment = "Test mapping comment."
'        End With
'
'        With Hosts
'
'            ' Delete the Host file.
'            If .FileExists Then
'                .FileDelete()
'            End If
'
'            ' Create a new one Hosts file.
'            .FileCreate()
'
'            ' Add some new mappings.
'            .Add(Mapping)
'            .Add(HostName:="www.youtube.com", IP:=.LOCALHOST, Comment:="Test mapping comment")
'
'            ' Check if a mapping exists.
'            If .IsMapped(Mapping) Then
'                ' Disable the mapping.
'                .Disable(Mapping)
'            End If
'
'            ' Check if an existint mapping is disabled.
'            If .IsDisabled("www.youtube.com") Then
'                ' Remove the mapping.
'                .Remove("www.youtube.com")
'            End If
'
'            ' Open the HOSTS file with the specified text-editor.
'            .FileOpen("C:\Program Files\Sublime Text\sublime_text.exe")
'
'        End With
'
'        ' Get the IP of a mapped Hostname.
'        MessageBox.Show("cuantodanio.es: " & Hosts.GetMappingFromHostname("cuantodanio.es").IP)
'
'        ' Get all the hostname mappings
'        Dim Mappings As List(Of HostsFile.MappingInfo) = Hosts.GetMappings()
'        For Each MappingInfo As HostsFile.MappingInfo In Mappings
'
'            Dim sb As New System.Text.StringBuilder
'            With sb
'                .AppendLine(String.Format("Hostname...: {0}", MappingInfo.HostName))
'                .AppendLine(String.Format("IP Address.: {0}", MappingInfo.IP))
'                .AppendLine(String.Format("Comment....: {0}", MappingInfo.Comment))
'                .AppendLine(String.Format("Is Enabled?: {0}", Not MappingInfo.IsDisabled))
'            End With
'
'            MessageBox.Show(sb.ToString, "HostsFile Mappings", MessageBoxButtons.OK, MessageBoxIcon.Information)
'
'        Next MappingInfo
'
'        ' Get all the hostname mappings that matches an ip address
'        Dim MappingMatches As List(Of HostsFile.MappingInfo) = Hosts.GetMappingsFromIP(Hosts.LOCALHOST)
'
'    End Sub
'
'End Class

#End Region

#Region " Imports "

Imports System.IO
Imports System.Net
Imports System.Text
'Imports System.Text.RegularExpressions

#End Region

#Region " Hosts File "

''' <summary>
''' Manages the Windows HOSTS file to map Hostnames to IP addresses.
''' </summary>
Public Class HostsFile

#Region " Constructors "

   ''' <summary>
   ''' Initializes a new instance of the <see cref="HostsFile"/> class.
   ''' </summary>
   ''' <param name="HOSTSLocation">
   ''' Optionaly indicates a custom Hosts file location.
   ''' Default value is 'X:\Windows\System32\Drivers\etc\hosts'.
   ''' </param>
   Public Sub New(Optional ByVal HOSTSLocation As String = Nothing)

       If Not String.IsNullOrEmpty(HOSTSLocation) Then
           Me._HOSTSLocation = HOSTSLocation
       End If

   End Sub

   ''' <summary>
   ''' Prevents a default instance of the <see cref="HostsFile"/> class from being created.
   ''' </summary>
   Private Sub New()
   End Sub

#End Region

#Region " Properties "

   ''' <summary>
   ''' The Hosts file location.
   ''' </summary>
   ''' <value>The Hosts file location.</value>
   Public ReadOnly Property HOSTSLocation As String
       Get
           Return _HOSTSLocation
       End Get
   End Property
   Private SysDir As String = Environment.GetFolderPath(Environment.SpecialFolder.System)
   Private _HOSTSLocation As String = Path.Combine(SysDir, "Drivers\etc\hosts")

   ''' <summary>
   ''' The Hosts file encoding.
   ''' The encoding must be <see cref="Encoding.Default"/> (ANSI) or <see cref="Encoding.UTF8"/> (UTF-8 without BOM),
   ''' otherwise the entries will be ignored by Windows.
   ''' </summary>
   ''' <value>The Hosts file encoding.</value>
   Public Property HOSTSEncoding As Encoding
       Get
           Return _HOSTSEncoding
       End Get
       Set(ByVal value As Encoding)
           Me._HOSTSEncoding = value
       End Set
   End Property
   Private _HOSTSEncoding As Encoding = Encoding.Default

   ''' <summary>
   ''' Gets or sets the default 'LocalHost' IP address.
   ''' In most computers the default address is '127.0.0.1'.
   ''' </summary>
   ''' <value>The default LocalHost.</value>
   Public Property LOCALHOST As String
       Get
           Return Me._LOCALHOST
       End Get
       Set(ByVal value As String)
           Me._LOCALHOST = value
       End Set
   End Property
   Private _LOCALHOST As String = "127.0.0.1"

   ''' <summary>
   ''' Gets the default Hosts file header.
   ''' </summary>
   Private ReadOnly HostsHeader As String =
<a><![CDATA[
# Copyright (c) 1993-2009 Microsoft Corp.
#
# This is a sample HOSTS file used by Microsoft TCP/IP for Windows.
#
# This file contains the mappings of IP addresses to host names. Each
# entry should be kept on an individual line. The IP address should
# be placed in the first column followed by the corresponding host name.
# The IP address and the host name should be separated by at least one
# space.
]]></a>.Value

#End Region

#Region " Types "

#Region " MappingInfo "

   ''' <summary>
   ''' Specifies info of a HOSTS file mapping.
   ''' </summary>
   Public Class MappingInfo

       ''' <summary>
       ''' Gets or sets the hostname.
       ''' </summary>
       ''' <value>The hostname.</value>
       Public Property HostName As String

       ''' <summary>
       ''' Gets or sets the IP address.
       ''' </summary>
       ''' <value>The IP address.</value>
       Public Property IP As String

       ''' <summary>
       ''' Gets or sets the mapping comment.
       ''' </summary>
       ''' <value>The mapping comment.</value>
       Public Property Comment As String

       ''' <summary>
       ''' This value is reserved.
       ''' Gets a value indicating whether the mapping is disabled in the HOSTS file.
       ''' </summary>
       ''' <value><c>true</c> if the mapping is disabled, <c>false</c> otherwise.</value>
       Public Property IsDisabled As Boolean

   End Class

#End Region

#End Region

#Region " Public Methods "

   ''' <summary>
   ''' Adds a new mapping.
   ''' </summary>
   ''' <param name="HostName">Indicates the Hostname.</param>
   ''' <param name="IP">Indicates the IP address.</param>
   ''' <param name="Comment">Indicates a comment for this mapping.</param>
   ''' <exception cref="System.IO.FileNotFoundException">"Hosts file not found."</exception>
   ''' <exception cref="System.FormatException">Invalid IP adress.</exception>
   ''' <exception cref="System.Exception">Hostname is already mapped.</exception>
   Public Sub Add(ByVal HostName As String,
                  ByVal IP As String,
                  Optional ByVal Comment As String = Nothing)

       If Not Me.FileExists() Then ' Hosts file does not exists.
           Throw New FileNotFoundException("Hosts file not found.", Me._HOSTSLocation)

       ElseIf Not Me.ValidateIP(IP) Then ' Invalid IP address.
           Throw New FormatException(String.Format("Address: '{0}' is not a valid IP adress.", IP))

       ElseIf Me.IsMapped(HostName) Then ' Hostname is already mapped.
           Throw New Exception(String.Format("Hostname '{0}' is already mapped.", HostName))

       Else ' Add the entry.

           ' Fix value spacing.
           Dim EntryFormat As String =
               IP & HostName.Insert(0I, ControlChars.Tab) &
               If(Not String.IsNullOrEmpty(Comment),
                  Comment.Insert(0I, ControlChars.Tab & "#"c),
                  String.Empty)

           ' Write the mapping.
           File.AppendAllText(Me._HOSTSLocation, Environment.NewLine & EntryFormat, Me._HOSTSEncoding)

       End If

   End Sub

   ''' <summary>
   ''' Adds a new mapping.
   ''' </summary>
   ''' <param name="MappingInfo">A <see cref="MappingInfo"/> instance containing the mapping info.</param>
   Public Sub Add(ByVal MappingInfo As MappingInfo)

       Me.Add(MappingInfo.HostName, MappingInfo.IP, MappingInfo.Comment)

   End Sub

   ''' <summary>
   ''' Disables an existing mapping.
   ''' </summary>
   ''' <param name="HostName">Indicates the Hostname.</param>
   ''' <exception cref="System.IO.FileNotFoundException">"Hosts file not found."</exception>
   ''' <exception cref="System.Exception">Hostname is not mapped.</exception>
   ''' <exception cref="System.Exception">Hostname is already disabled.</exception>
   Public Sub Disable(ByVal HostName As String)

       If Not Me.FileExists() Then ' Hosts file does not exists.
           Throw New FileNotFoundException("Hosts file not found.", Me._HOSTSLocation)

       ElseIf Not Me.IsMapped(HostName) Then ' Hostname is not mapped.
           Throw New Exception(String.Format("Hostname: '{0}' is not mapped.", HostName))

       ElseIf Me.IsDisabled(HostName) Then ' Hostname is already disabled.
           Throw New Exception(String.Format("Hostname: '{0}' is already disabled.", HostName))

       Else ' Disable the mapping.

           ' Retrieve the HOSTS file content.
           Dim Hosts As List(Of String) = File.ReadAllLines(Me._HOSTSLocation, Me._HOSTSEncoding).ToList

           ' Iterate the mappings.
           For X As Integer = 0I To (Hosts.Count - 1I)

               If Not String.IsNullOrEmpty(Hosts(X)) AndAlso Hosts(X).Contains(ControlChars.Tab) Then

                   ' Retrieve the HostName of this mapping.
                   Dim Host As String = Hosts(X).Split({ControlChars.Tab})(1I)

                   If Host.Equals(HostName, StringComparison.OrdinalIgnoreCase) Then

                       ' Disable the mapping.
                       Hosts(X) = Hosts(X).Insert(0I, "#"c)
                       Exit For

                   End If ' Host.Equals(...)

               End If ' Not String.IsNullOrEmpty(Hosts(X))...

           Next X

           File.WriteAllLines(Me._HOSTSLocation, Hosts, Me._HOSTSEncoding)

       End If

   End Sub

   ''' <summary>
   ''' Disables an existing mapping.
   ''' </summary>
   ''' <param name="MappingInfo">A <see cref="MappingInfo"/> instance containing the mapping info.</param>
   Public Sub Disable(ByVal MappingInfo As MappingInfo)

       Me.Disable(MappingInfo.HostName)

   End Sub

   ''' <summary>
   ''' Removes a mapping.
   ''' </summary>
   ''' <param name="HostName">Indicates the Hostname.</param>
   ''' <exception cref="System.IO.FileNotFoundException">"Hosts file not found."</exception>
   ''' <exception cref="System.Exception">Hostname is not mapped.</exception>
   Public Sub Remove(ByVal HostName As String)

       If Not Me.FileExists() Then ' Hosts file does not exists.
           Throw New FileNotFoundException("Hosts file not found.", Me._HOSTSLocation)

       ElseIf Not Me.IsMapped(HostName) Then ' Hostname is not mapped.
           Throw New Exception(String.Format("Hostname: '{0}' is not mapped.", HostName))

       Else ' Remove the mapping.

           ' Retrieve the HOSTS file content.
           Dim Hosts As List(Of String) = File.ReadAllLines(Me._HOSTSLocation, Me._HOSTSEncoding).ToList

           ' Iterate the mappings.
           For X As Integer = 0I To (Hosts.Count - 1I)

               If Not String.IsNullOrEmpty(Hosts(X)) AndAlso Hosts(X).Contains(ControlChars.Tab) Then

                   ' Retrieve the HostName of this mapping.
                   Dim Host As String = Hosts(X).Split({ControlChars.Tab})(1I)

                   If Host.Equals(HostName, StringComparison.OrdinalIgnoreCase) Then

                       ' Remove the mapping.
                       Hosts.RemoveAt(X)
                       Exit For

                   End If ' Host.Equals(...)

               End If ' Not String.IsNullOrEmpty(Hosts(X))...

           Next X

           File.WriteAllLines(Me._HOSTSLocation, Hosts, Me._HOSTSEncoding)

       End If

   End Sub

   ''' <summary>
   ''' Removes a mapping.
   ''' </summary>
   ''' <param name="MappingInfo">A <see cref="MappingInfo"/> instance containing the mapping info.</param>
   Public Sub Remove(ByVal MappingInfo As MappingInfo)

       Me.Remove(MappingInfo.HostName)

   End Sub

   ''' <summary>
   ''' Gets a <see cref="List(Of HostsMapping)"/> instance containing the mapping info of all mappings.
   ''' </summary>
   ''' <exception cref="System.IO.FileNotFoundException">"Hosts file not found."</exception>
   Public Function GetMappings() As List(Of MappingInfo)

       If Not Me.FileExists() Then ' Hosts file does not exists.
           Throw New FileNotFoundException("Hosts file not found.", Me._HOSTSLocation)

       Else ' Get the mapping.

           ' Retrieve the HOSTS file content.
           Dim Hosts As List(Of String) = File.ReadAllLines(Me._HOSTSLocation, Me._HOSTSEncoding).ToList
           Dim Mappings As New List(Of MappingInfo)

           ' Iterate the mappings.
           For X As Integer = 0I To (Hosts.Count - 1I)

               If Not String.IsNullOrEmpty(Hosts(X)) AndAlso Hosts(X).Contains(ControlChars.Tab) Then

                   ' Retrieve the mapping parts.
                   Dim Parts As String() = Hosts(X).Split({ControlChars.Tab})

                   Dim MappingInfo As New MappingInfo
                   With MappingInfo
                       .HostName = Parts(1I)
                       .IP = Parts(0I).Replace("#"c, String.Empty)
                       .Comment = If(Parts.Count > 1I, Parts(2I), String.Empty)
                       .IsDisabled = Parts(0I).TrimStart.StartsWith("#"c)
                   End With ' MappingInfo

                   Mappings.Add(MappingInfo)

               End If ' Not String.IsNullOrEmpty(Hosts(X))...

           Next X

           Return Mappings

       End If

   End Function

   ''' <summary>
   ''' Gets a <see cref="MappingInfo"/> instance containing the mapping info of a Hostname.
   ''' </summary>
   ''' <param name="HostName">Indicates the Hostname.</param>
   ''' <exception cref="System.IO.FileNotFoundException">"Hosts file not found."</exception>
   ''' <exception cref="System.Exception">Hostname is not mapped.</exception>
   Public Function GetMappingFromHostname(ByVal Hostname As String) As MappingInfo

       If Not Me.FileExists() Then ' Hosts file does not exists.
           Throw New FileNotFoundException("Hosts file not found.", Me._HOSTSLocation)

       ElseIf Not Me.IsMapped(Hostname) Then ' Hostname is not mapped.
           Throw New Exception(String.Format("Hostname: '{0}' is not mapped.", Hostname))

       Else ' Get the mapping.

           ' Retrieve the HOSTS file content.
           Dim Hosts As List(Of String) = File.ReadAllLines(Me._HOSTSLocation, Me._HOSTSEncoding).ToList
           Dim MappingInfo As New MappingInfo

           ' Iterate the mappings.
           For X As Integer = 0I To (Hosts.Count - 1I)

               If Not String.IsNullOrEmpty(Hosts(X)) AndAlso Hosts(X).Contains(ControlChars.Tab) Then

                   ' Retrieve the mapping parts.
                   Dim Parts As String() = Hosts(X).Split({ControlChars.Tab})

                   If Parts(1I).Equals(Hostname, StringComparison.OrdinalIgnoreCase) Then

                       With MappingInfo
                           .HostName = Parts(1I)
                           .IP = Parts(0I).Replace("#"c, String.Empty)
                           .Comment = If(Parts.Count > 1I, Parts(2I), String.Empty)
                           .IsDisabled = Parts(0I).TrimStart.StartsWith("#"c)
                       End With ' MappingInfo

                       Exit For

                   End If ' Parts(1I).Equals(Hostname)...

               End If ' Not String.IsNullOrEmpty(Hosts(X))...

           Next X

           Return MappingInfo

       End If

   End Function

   ''' <summary>
   ''' Gets a <see cref="List(Of HostsMapping)"/> instance containing the mapping info of all mappings
   ''' matching the specified IP address.
   ''' </summary>
   ''' <exception cref="System.IO.FileNotFoundException">"Hosts file not found."</exception>
   ''' <exception cref="System.FormatException">Invalid IP adress.</exception>
   Public Function GetMappingsFromIP(ByVal IP As String) As List(Of MappingInfo)

       If Not Me.FileExists() Then ' Hosts file does not exists.
           Throw New FileNotFoundException("Hosts file not found.", Me._HOSTSLocation)

       ElseIf Not Me.ValidateIP(IP) Then ' Invalid IP address.
           Throw New FormatException(String.Format("Address: '{0}' is not a valid IP adress.", IP))

       Else ' Get the mapping.

           ' Retrieve the HOSTS file content.
           Dim Hosts As List(Of String) = File.ReadAllLines(Me._HOSTSLocation, Me._HOSTSEncoding).ToList
           Dim Mappings As New List(Of MappingInfo)

           ' Iterate the mappings.
           For X As Integer = 0I To (Hosts.Count - 1I)

               If Not String.IsNullOrEmpty(Hosts(X)) AndAlso Hosts(X).Contains(ControlChars.Tab) Then

                   ' Retrieve the mapping parts.
                   Dim Parts As String() = Hosts(X).Split({ControlChars.Tab})

                   If Parts(0I).Replace("#"c, String.Empty).Equals(IP) Then

                       Dim MappingInfo As New MappingInfo
                       With MappingInfo
                           .HostName = Parts(1I)
                           .IP = Parts(0I).Replace("#"c, String.Empty)
                           .Comment = If(Parts.Count > 1I, Parts(2I), String.Empty)
                           .IsDisabled = Parts(0I).TrimStart.StartsWith("#"c)
                       End With ' MappingInfo

                       Mappings.Add(MappingInfo)

                   End If

               End If ' Not String.IsNullOrEmpty(Hosts(X))...

           Next X

           Return Mappings

       End If

   End Function

   ''' <summary>
   ''' Checks whether a HostName is already mapped.
   ''' </summary>
   ''' <param name="HostName">Indicates the Hostname.</param>
   ''' <returns><c>true</c> if the specified Hostname is mapped; otherwise, <c>false</c>.</returns>
   ''' <exception cref="System.IO.FileNotFoundException">"Hosts file not found."</exception>
   Public Function IsMapped(ByVal HostName As String) As Boolean

       If Not Me.FileExists() Then ' Hosts file does not exists.
           Throw New FileNotFoundException("Hosts file not found.", Me._HOSTSLocation)

       Else
           ' Retrieve the HOSTS file content.
           Dim Hosts As List(Of String) = File.ReadAllLines(Me._HOSTSLocation, Me._HOSTSEncoding).ToList

           ' Iterate the mappings.
           For X As Integer = 0I To (Hosts.Count - 1I)

               If Not String.IsNullOrEmpty(Hosts(X)) AndAlso Hosts(X).Contains(ControlChars.Tab) Then

                   ' Retrieve the HostName of this mapping.
                   Dim Host As String = Hosts(X).Split({ControlChars.Tab})(1I)

                   If Host.Equals(HostName, StringComparison.OrdinalIgnoreCase) Then
                       Return True
                   End If ' Host.Equals(HostName)...

               End If ' Not String.IsNullOrEmpty(Hosts(X)) AndAlso...

           Next X

           Return False

       End If ' Not Me.Exists()...

   End Function

   ''' <summary>
   ''' Checks whether a HostName is already mapped.
   ''' </summary>
   ''' <param name="MappingInfo">A <see cref="MappingInfo"/> instance containing the mapping info.</param>
   ''' <returns><c>true</c> if the specified Hostname is mapped; otherwise, <c>false</c>.</returns>
   Public Function IsMapped(ByVal MappingInfo As MappingInfo) As Boolean

       Return Me.IsMapped(MappingInfo.HostName)

   End Function

   ''' <summary>
   ''' Checks whether a HostName is already disabled.
   ''' </summary>
   ''' <param name="HostName">Indicates the Hostname.</param>
   ''' <returns><c>true</c> if the specified Hostname is disabled; otherwise, <c>false</c>.</returns>
   ''' <exception cref="System.IO.FileNotFoundException">"Hosts file not found."</exception>
   ''' <exception cref="System.Exception">Hostname is not mapped.</exception>
   Public Function IsDisabled(ByVal HostName As String) As Boolean

       If Not Me.FileExists() Then ' Hosts file does not exists.
           Throw New FileNotFoundException("Hosts file not found.", Me._HOSTSLocation)

       ElseIf Not Me.IsMapped(HostName) Then ' Hostname is not mapped.
           Throw New Exception(String.Format("Hostname: '{0}' is not mapped.", HostName))

       Else
           ' Retrieve the HOSTS file content.
           Dim Hosts As List(Of String) = File.ReadAllLines(Me._HOSTSLocation, Me._HOSTSEncoding).ToList
           Dim Result As Boolean = False

           ' Iterate the mappings.
           For X As Integer = 0I To (Hosts.Count - 1I)

               If Not String.IsNullOrEmpty(Hosts(X)) AndAlso Hosts(X).Contains(ControlChars.Tab) Then

                   ' Retrieve the HostName of this mapping.
                   Dim Host As String = Hosts(X).Split({ControlChars.Tab})(1I)

                   If Host.Equals(HostName, StringComparison.OrdinalIgnoreCase) Then
                       Result = Hosts(X).TrimStart.StartsWith("#"c)
                       Exit For
                   End If ' Host.Equals(HostName)...

               End If ' Not String.IsNullOrEmpty(Hosts(X)) AndAlso...

           Next X

           Return Result

       End If

   End Function

   ''' <summary>
   ''' Checks whether a HostName is already disabled.
   ''' </summary>
   ''' <param name="MappingInfo">A <see cref="MappingInfo"/> instance containing the mapping info.</param>
   ''' <returns><c>true</c> if the specified Hostname is disabled; otherwise, <c>false</c>.</returns>
   Public Function IsDisabled(ByVal MappingInfo As MappingInfo) As Boolean

       Return Me.IsDisabled(MappingInfo.HostName)

   End Function

   ''' <summary>
   ''' Checks whether the Hosts file exists.
   ''' </summary>
   ''' <returns><c>true</c> if Hosts file exists, <c>false</c> otherwise.</returns>
   Public Function FileExists() As Boolean

       Return File.Exists(Me._HOSTSLocation)

   End Function

   ''' <summary>
   ''' Creates the Hosts file.
   ''' </summary>
   Public Sub FileCreate()

       If Me.FileExists() Then
           File.Delete(Me._HOSTSLocation)
       End If

       File.WriteAllText(Me._HOSTSLocation, Me.HostsHeader, Me._HOSTSEncoding)

   End Sub

   ''' <summary>
   ''' Deletes the Hosts file.
   ''' </summary>
   ''' <exception cref="System.IO.FileNotFoundException">Hosts file not found.</exception>
   Public Sub FileDelete()

       If Not Me.FileExists() Then
           Throw New FileNotFoundException("Hosts file not found.", Me._HOSTSLocation)

       Else
           File.Delete(Me._HOSTSLocation)

       End If

   End Sub

   ''' <summary>
   ''' Cleans the Hosts file.
   ''' This removes all the mappings and adds the default file header.
   ''' </summary>
   Public Sub FileClean()

       Me.FileCreate()

   End Sub

   ''' <summary>
   ''' Opens the Hosts file with the specified process.
   ''' </summary>
   ''' <param name="Process">
   ''' Indicates the process location.
   ''' Default value is: "notepad.exe".
   ''' </param>
   ''' <exception cref="System.IO.FileNotFoundException">Hosts file not found.</exception>
   ''' <exception cref="System.IO.FileNotFoundException">Process not found.</exception>
   Public Sub FileOpen(Optional ByVal Process As String = "notepad.exe")

       If Not Me.FileExists Then
           Throw New FileNotFoundException("Hosts file not found.", Me._HOSTSLocation)

       ElseIf Not File.Exists(Process) Then
           Throw New FileNotFoundException("Process not found.", Process)

       Else
           Diagnostics.Process.Start(Process, ControlChars.Quote & Me._HOSTSLocation & ControlChars.Quote)

       End If

   End Sub

#End Region

#Region " Private Methods "

   ''' <summary>
   ''' Validates an IP address.
   ''' </summary>
   ''' <param name="Address">The IP address.</param>
   ''' <returns><c>true</c> if IP is in the proper format, <c>false</c> otherwise.</returns>
   Private Function ValidateIP(ByVal Address As String) As Boolean

       Dim IP As IPAddress = Nothing
       Return IPAddress.TryParse(Address, IP)

   End Function

#End Region

End Class

#End Region


Ejemplos de uso:

Código (vbnet) [Seleccionar]
Public Class HostsFileTestClass

   Private Sub HostsFileTestHandler() Handles MyBase.Shown

       ' Instance the HostsFile Class.
       Dim Hosts As New HostsFile()

       ' Set a new mapping.
       Dim Mapping As New HostsFile.MappingInfo
       With Mapping
           .HostName = "cuantodanio.es"
           .IP = Hosts.LOCALHOST ' "127.0.0.1"
           .Comment = "Test mapping comment."
       End With

       With Hosts

           ' Delete the Host file.
           If .FileExists Then
               .FileDelete()
           End If

           ' Create a new one Hosts file.
           .FileCreate()

           ' Add some new mappings.
           .Add(Mapping)
           .Add(HostName:="www.youtube.com", IP:=.LOCALHOST, Comment:="Test mapping comment")

           ' Check if a mapping exists.
           If .IsMapped(Mapping) Then
               ' Disable the mapping.
               .Disable(Mapping)
           End If

           ' Check if an existint mapping is disabled.
           If .IsDisabled("www.youtube.com") Then
               ' Remove the mapping.
               .Remove("www.youtube.com")
           End If

           ' Open the HOSTS file with the specified text-editor.
           .FileOpen("C:\Program Files\Sublime Text\sublime_text.exe")

       End With

       ' Get the IP of a mapped Hostname.
       MessageBox.Show("cuantodanio.es: " & Hosts.GetMappingFromHostname("cuantodanio.es").IP)

       ' Get all the hostname mappings
       Dim Mappings As List(Of HostsFile.MappingInfo) = Hosts.GetMappings()
       For Each MappingInfo As HostsFile.MappingInfo In Mappings

           Dim sb As New System.Text.StringBuilder
           With sb
               .AppendLine(String.Format("Hostname...: {0}", MappingInfo.HostName))
               .AppendLine(String.Format("IP Address.: {0}", MappingInfo.IP))
               .AppendLine(String.Format("Comment....: {0}", MappingInfo.Comment))
               .AppendLine(String.Format("Is Enabled?: {0}", Not MappingInfo.IsDisabled))
           End With

           MessageBox.Show(sb.ToString, "HostsFile Mappings", MessageBoxButtons.OK, MessageBoxIcon.Information)

       Next MappingInfo

       ' Get all the hostname mappings that matches an ip address
       Dim MappingMatches As List(Of HostsFile.MappingInfo) = Hosts.GetMappingsFromIP(Hosts.LOCALHOST)

   End Sub

End Class