/// 得到真实IP以及所在地详细信息(Porschev)
/// </summary>
/// <returns></returns>
public string GetIpDetails()
{
//设置获取IP地址和国家源码的网址
string url = "http://www.ip138.com/ips8.asp";
string regStr = "(?<=<td\\s*align=\\\"center\\\">)[^<]*?(?=<br/><br/></td>)";
//IP正则
string ipRegStr = "((2[0-4]\\d|25[0-5]|[01]?\\d\\d?)\\.){3}(2[0-4]\\d|25[0-5]|[01]?\\d\\d?)";
//IP地址
string ip = string.Empty;
//国家
string country = string.Empty;
//省市
string adr = string.Empty;
//得到网页源码
string html = GetHtml(url);
Regex reg = new Regex(regStr, RegexOptions.None);
Match ma = reg.Match(html); html = ma.Value;
Regex ipReg = new Regex(ipRegStr, RegexOptions.None);
ma = ipReg.Match(html);
//得到IP
ip = ma.Value;
int index = html.LastIndexOf(":") + 1;
//得到国家
country = html.Substring(index);
adr = GetAdrByIp(ip);
return "IP:" + ip + " 国家:" + country + " 省市:" + adr;
}
/// <summary>
/// 通过IP得到IP所在地省市(Porschev)
/// </summary>
/// <param name="ip"></param>
/// <returns></returns>
public string GetAdrByIp(string ip)
{
string url = "http://www.cz88.net/ip/?ip=" + ip;
string regStr = "(?<=<span\\s*id=\\\"cz_addr\\\">).*?(?=</span>)";
//得到网页源码
string html = GetHtml(url);
Regex reg = new Regex(regStr, RegexOptions.None);
Match ma = reg.Match(html);
html = ma.Value;
string[] arr = html.Split(' ');
return arr[0];
}
/// 获取HTML源码信息(Porschev)
/// </summary>
/// <param name="url">获取地址</param>
/// <returns>HTML源码</returns>
public string GetHtml(string url)
{
string str = "";
try
{
Uri uri = new Uri(url);
WebRequest wr = WebRequest.Create(uri);
Stream s = wr.GetResponse().GetResponseStream();
StreamReader sr = new StreamReader(s, Encoding.Default);
str = sr.ReadToEnd();
}
catch (Exception e)
{
}
return str;
}
本文链接
Visual Studio使用流处理数据文件。设计流的目的是把一系列字节从一个位置传输到另一个位置。流和其他对象一样,具有方法和属性。流对象位于System.IO命名空间中。
在C#中读写少量数据时,最简单的方法是使用StreamReader和StreamWriter对象。
(一)将数据写入文件的步骤:
1)声明一个StreamWriter对象,这同时声明的数据文件的名称。
2)使用StreamWriter的WriteLine方法把数据复制到内存的缓冲区中(缓冲区仅仅是一个临时的存储位置)。
3)调用StreamWriter的Close方法,将数据从缓冲区传输到文件中,并释放流使用的系统资源。
实例化StreamWriter对象——通式
(二)从文件中读取数据的步骤:
1)声明StreamReader类的一个对象。构造函数将声明文件名和可选路径。这个语句将打开文件,以便读取其中的数据。
2)使用ReadLine方法读取数据。检索多个记录时,需要使用循环。
3)完成以后,使用StreamReader的Close方法关闭流。
实例化StreamReader对象——通式
检查文件是否结束
本文链接
在Windows 8开发中另外一个非常好的工具:文件选择器。可以从用户机器上获取一个或者多个文件。最后我也会介绍一下如何在用户机器上选择一个文件夹。
1. 更新package.appxmanifest,我们与用户系统进行交互的所有机制,首先都需要更新package.appxmanifest文件。在本文,我们要进行文件的打开和保存,所以所以需要添加相应的声明。
1)针对文件打开选择器,需要添加如下内容:
如上图,有两个选择:
支持任何文件类型:选择这个的话,你的程序就被声明为可以访问任意类型的文件。
支持文件类型:在这里指定你想要打开的文件类型,例如你只想让程序打开Excel文件,那么可以在这里输入“.xls”。
2)文件保存选择器的设置也是类似的。如下图:
2. 从用户机器上获取一个文件
1)选择一个或者多个文件(FileOpenPicker)
本文创建从用户机器上选择文件,首先是选择一个文件,然后是多个文件,接着是选择指定某种文件类型(如.png)的多个文件。从用户机器上选择一个文件,需要从FileOpenPicker对象开始。这个对象会给用户打开一个文件打开选择器对话框,帮助用户选择一个或者多个文件,然后返回给我们。它有许多选项,我这里会进行介绍。下面是选择指定文件类型的一个文件的相关代码:
private async void Button_Click(object sender, RoutedEventArgs e)
{
FileOpenPicker picker = newFileOpenPicker();
picker.ViewMode =PickerViewMode.Thumbnail; //设置文件的现实方式,这里选择的是图标
picker.SuggestedStartLocation =PickerLocationId.PicturesLibrary; //设置打开时的默认路径,这里选择的是图片库
picker.FileTypeFilter.Add(".jpg"); //添加可选择的文件类型,这个必须要设置
picker.FileTypeFilter.Add(".jpeg");
picker.FileTypeFilter.Add(".png");
IReadOnlyList<StorageFile> files =await picker.PickMultipleFilesAsync(); //选择打开多个文件
// StorageFile file = await picker.PickSingleFileAsync(); //只能选择一个文件
if (files !=