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 }
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 }

浙公网安备 33010602011771号