关于文件和流的总结

在日常的项目中时常会用到文件和流的操作,以下记录一些我用的操作以及持续的添加。

流操作只能对文件而不是文件夹

文件信息可以配合使用List<文件类>来保存文件的信息

1.删除目录下所有文件

foreach (string f in Directory.GetFileSystemEntries(Path))
            {

                if (File.Exists(f))
                {
                    //如果有子文件删除文件
                    File.Delete(f);

                }
            }//删除本地文件

2.在当前目录创建一个文件夹

string path = System.IO.Directory.GetCurrentDirectory();  
string newPath = System.IO.Path.Combine(path, "mySubDirOne");

3.获取路径下所有文件夹并且在每个文件夹下面查找

 DirectoryInfo root = new DirectoryInfo(path);
            foreach (DirectoryInfo d in root.GetDirectories())
   {
          foreach (var item in d.EnumerateFiles()) 
           {

           } 

}

4.文件流的操作需要在最后关闭流防止进程占用

//localpath是个完整的文件名地址
//OpenWrite是打开或者创建一个文件是File操作
//FileStream 将文件变成流 
FileStream fs = File.OpenWrite(localpath);
fs.Close();
//path是完整的文件路径名
//OpenRead是读取
FileStream fs = File.OpenRead(path);

fs.Close();

5.WebApi2保存前端Form提交的Stream文件.

HttpFileCollection files = HttpContext.Current.Request.Files;
HttpPostedFile file = files["file"];
string newPath = @"D:\\MyProject\\controlcard\\ControlCardApi\\ControlCardApi\\Avatar\" + file.FileName+DateTime.Now.ToString("yyyyMMddHHmmss");
//保存文件
file.SaveAs(newPath);

 

File还有很多操作CPOY,DELETE,Exists,MOVE等等。

 

使用Http调用接口传输文件,控制台脚本Exe

using System;
using System.Configuration;
using System.Diagnostics;
using System.IO;
using System.Net;
using System.Text;

namespace UploadFile
{
    public class Program
    {
        
        static void Main(string[] args)
        {
            string path = ConfigurationManager.AppSettings["path"].ToString();
            DirectoryInfo dir = new DirectoryInfo(path);
            FileInfo[] inf = dir.GetFiles();
            foreach (FileInfo finf in inf)
            {
                if (finf.Extension.Equals(".xlsx") || finf.Extension.Equals(".xls")) //如果扩展名为“.xlsx”
                {
                    if (finf.CreationTime.AddDays(5) >= DateTime.Now)
                    {
                        HttpUploadFile("http://127.0.0.1/File/api/File/UploadFile", finf.FullName);
                    }
                }
            }
        }

        /// <summary>
        /// Http上传文件
        /// </summary>
        public static string HttpUploadFile(string url, string path)
        {
            // 设置参数
            HttpWebRequest request = WebRequest.Create(url) as HttpWebRequest;
            CookieContainer cookieContainer = new CookieContainer();
            request.CookieContainer = cookieContainer;
            request.AllowAutoRedirect = true;
            request.Method = "POST";
            string boundary = DateTime.Now.Ticks.ToString("X"); // 随机分隔线
            request.ContentType = "multipart/form-data;charset=utf-8;boundary=" + boundary;
            byte[] itemBoundaryBytes = Encoding.UTF8.GetBytes("\r\n--" + boundary + "\r\n");
            byte[] endBoundaryBytes = Encoding.UTF8.GetBytes("\r\n--" + boundary + "--\r\n");

            int pos = path.LastIndexOf("\\");
            string fileName = path.Substring(pos + 1);

            //请求头部信息 
            StringBuilder sbHeader = new StringBuilder(string.Format("Content-Disposition:form-data;name=\"file\";filename=\"{0}\"\r\nContent-Type:application/octet-stream\r\n\r\n", fileName));
            byte[] postHeaderBytes = Encoding.UTF8.GetBytes(sbHeader.ToString());

            FileStream fs = new FileStream(path, FileMode.Open, FileAccess.Read);
            byte[] bArr = new byte[fs.Length];
            fs.Read(bArr, 0, bArr.Length);
            fs.Close();

            Stream postStream = request.GetRequestStream();
            postStream.Write(itemBoundaryBytes, 0, itemBoundaryBytes.Length);
            postStream.Write(postHeaderBytes, 0, postHeaderBytes.Length);
            postStream.Write(bArr, 0, bArr.Length);
            postStream.Write(endBoundaryBytes, 0, endBoundaryBytes.Length);
            postStream.Close();

            //发送请求并获取相应回应数据
            HttpWebResponse response = request.GetResponse() as HttpWebResponse;
            //直到request.GetResponse()程序才开始向目标网页发送Post请求
            Stream instream = response.GetResponseStream();
            StreamReader sr = new StreamReader(instream, Encoding.UTF8);
            //返回结果网页(html)代码
            string content = sr.ReadToEnd();
            return content;
        }

    }
}

 

posted @ 2019-11-11 15:57  最爱吃汤圆27  阅读(195)  评论(0)    收藏  举报