C# 通过Url链接下载本地,创建路径以及输出到txt文本

文章来源:https://blog.csdn.net/weixin_43205990/article/details/94458975

 

  1     public static bool Download(string url, string localfile)  //文件的url 和 下载到本地的地址
  2         {
  3             bool flag = false;
  4             long startPosition = 0; // 上次下载的文件起始位置
  5             FileStream writeStream; // 写入本地文件流对象
  6 
  7             long remoteFileLength = GetHttpLength(url);// 取得远程文件长度
  8                                                        //System.Console.WriteLine("remoteFileLength=" + remoteFileLength);
  9             if (remoteFileLength == 745)
 10             {
 11                 System.Console.WriteLine("远程文件不存在.");
 12                 return false;
 13             }
 14 
 15             // 判断要下载的文件夹是否存在
 16             if (File.Exists(localfile))
 17             {
 18 
 19                 writeStream = File.OpenWrite(localfile);             // 存在则打开要下载的文件
 20                 startPosition = writeStream.Length;                  // 获取已经下载的长度
 21 
 22                 if (startPosition >= remoteFileLength)
 23                 {
 24                     //System.Console.WriteLine("本地文件长度" + startPosition + "已经大于等于远程文件长度" + remoteFileLength);
 25                     writeStream.Close();
 26 
 27                     return false;
 28                 }
 29                 else
 30                 {
 31                     writeStream.Seek(startPosition, SeekOrigin.Current); // 本地文件写入位置定位
 32                 }
 33             }
 34             else
 35             {
 36                 writeStream = new FileStream(localfile, FileMode.Create);// 文件不保存创建一个文件
 37                 startPosition = 0;
 38             }
 39 
 40 
 41             try
 42             {
 43                 HttpWebRequest myRequest = (HttpWebRequest)HttpWebRequest.Create(url);// 打开网络连接
 44 
 45                 if (startPosition > 0)
 46                 {
 47                     myRequest.AddRange((int)startPosition);// 设置Range值,与上面的writeStream.Seek用意相同,是为了定义远程文件读取位置
 48                 }
 49 
 50 
 51                 Stream readStream = myRequest.GetResponse().GetResponseStream();// 向服务器请求,获得服务器的回应数据流
 52 
 53 
 54                 byte[] btArray = new byte[512];// 定义一个字节数据,用来向readStream读取内容和向writeStream写入内容
 55                 int contentSize = readStream.Read(btArray, 0, btArray.Length);// 向远程文件读第一次
 56 
 57                 long currPostion = startPosition;
 58 
 59                 while (contentSize > 0)// 如果读取长度大于零则继续读
 60                 {
 61                     //currPostion += contentSize;
 62                     //int percent = (int)(currPostion * 100 / remoteFileLength);
 63                     //System.Console.WriteLine("percent=" + percent + "%");
 64 
 65                     writeStream.Write(btArray, 0, contentSize);// 写入本地文件
 66                     contentSize = readStream.Read(btArray, 0, btArray.Length);// 继续向远程文件读取
 67                 }
 68 
 69                 //关闭流
 70                 writeStream.Close();
 71                 readStream.Close();
 72 
 73                 flag = true;        //返回true下载成功
 74                 System.Console.WriteLine("下载-" + localfile + "-成功");
 75 
 76    
 77             }
 78             catch (Exception)
 79             {
 80                 writeStream.Close();
 81                 flag = false;       //返回false下载失败
 82             }
 83 
 84             return flag;
 85         }
 86         // 从文件头得到远程文件的长度
 87         private static long GetHttpLength(string url)
 88         {
 89             long length = 0;
 90 
 91             try
 92             {
 93                 HttpWebRequest req = (HttpWebRequest)HttpWebRequest.Create(url);// 打开网络连接
 94                 HttpWebResponse rsp = (HttpWebResponse)req.GetResponse();
 95 
 96                 if (rsp.StatusCode == HttpStatusCode.OK)
 97                 {
 98                     length = rsp.ContentLength;// 从文件头得到远程文件的长度
 99                 }
100 
101                 rsp.Close();
102                 return length;
103             }
104             catch (Exception e)
105             {
106                 return length;
107             }
108 
109         }
通过Url下载文件
1         public static void CreateFolder(string folderName)
2         {
3 
4             if (!Directory.Exists( folderName))
5             {
6                 Directory.CreateDirectory( folderName);
7             }
8         }
判断是否存在该路径,不存在则创建
 1   public static void AddLgoToTXT(string logstring)
 2         {
 3             string path = AppDomain.CurrentDomain.BaseDirectory + "operalog.txt";
 4             if (!System.IO.File.Exists(path))
 5             {
 6                 FileStream stream = System.IO.File.Create(path);
 7                 stream.Close();
 8                 stream.Dispose();
 9             }
10             using (StreamWriter writer = new StreamWriter(path, true))
11             {
12                 writer.WriteLine(logstring);
13             }
14         }
错误信息输出成txt

 

posted @ 2019-09-06 15:20  Alex_Mercer  阅读(827)  评论(0)    收藏  举报