在C#中使用hostfile我可以阻止网站但我无法解锁它们。
String path = @"C:\Windows\System32\drivers\etc\hosts";
StreamWriter sw = new StreamWriter(path, true);
sitetoblock = "\r\n127.0.0.1\t" + txtException.Text;
sw.Write(sitetoblock);
sw.Close();
MessageBox.Show(txtException.Text + " is blocked", "BLOCKED");
lbWebsites.Items.Add(txtException.Text);
txtException.Clear();
在这里,我需要一些帮助才能解锁从listbox(lbWebsites)中选择的特定网站。有没有办法从主机文件中删除它们?我尝试了很多,并寻找其他解决方案,但每个解决方案都出了问题。
答案 0 :(得分:3)
您需要删除您编写的行以阻止该网站。最有效的方法是读入hosts文件并再次写入。
顺便说一句,你阻止网站的方法不会很有效。对于您的使用场景可能没问题,但技术人员会知道查看主机文件。答案 1 :(得分:1)
您可以使用StreamReader
将主机文件读入string
。然后,初始化StreamWriter
的新实例以编写回收的内容,不包括您要取消阻止的网站。
示例强>
string websiteToUnblock = "example.com"; //Initialize a new string of name websiteToUnblock as example.com
StreamReader myReader = new StreamReader(@"C:\Windows\System32\drivers\etc\hosts"); //Initialize a new instance of StreamReader of name myReader to read the hosts file
string myString = myReader.ReadToEnd().Replace(websiteToUnblock, ""); //Replace example.com from the content of the hosts file with an empty string
myReader.Close(); //Close the StreamReader
StreamWriter myWriter = new StreamWriter(@"C:\Windows\System32\drivers\etc\hosts"); //Initialize a new instance of StreamWriter to write to the hosts file; append is set to false as we will overwrite the file with myString
myWriter.Write(myString); //Write myString to the file
myWriter.Close(); //Close the StreamWriter
谢谢, 我希望你觉得这很有帮助:)
答案 2 :(得分:0)
你可以这样做:
String path = @"C:\Windows\System32\drivers\etc\hosts";
System.IO.TextReader reader = new StreamReader(path);
List<String> lines = new List<String>();
while((String line = reader.ReadLine()) != null)
lines.Add(line);
然后在行列表中包含hosts文件的所有行。之后,您可以搜索要取消阻止的网站,并将其从列表中删除,直到列表中不再包含所需的网站:
int index = 0;
while(index != -1)
{
index = -1;
for(int i = 0; i< lines.Count(); i++)
{
if(lines[i].Contains(sitetounblock))
{
index = i;
break;
}
}
if(index != -1)
lines.RemoveAt(i);
}
完成后,只需将清理后的列表转换为普通字符串:
String content = "";
foreach(String line in lines)
{
content += line + Environment.NewLine;
}
然后只需将内容写入文件;)
写在我脑海里,所以不保证没有错误:P