国产探花免费观看_亚洲丰满少妇自慰呻吟_97日韩有码在线_资源在线日韩欧美_一区二区精品毛片,辰东完美世界有声小说,欢乐颂第一季,yy玄幻小说排行榜完本

首頁 > 編程 > C# > 正文

C# 文件上傳下載(Excel導入,多線程下載)功能的實現代碼

2020-01-24 00:32:36
字體:
來源:轉載
供稿:網友

廢話不多說了,直接給大家貼代碼,具體代碼如下所示:

//打開Excel文件,轉換為DataTable      DataTable dtExcel;    private void OpenFile()    {      OpenFileDialog dialog = new OpenFileDialog();      dialog.Filter = "Microsoft Excel files(*.xls)|*.xls;*.xlsx"; //篩選打開文件類型 :圖片 *.jpg|*.jpg|*.bmp|*.bmp ;"音頻文|*.mp3;*.wma;*.aac;*.midi;*.wav" 等等      if (dialog.ShowDialog() == DialogResult.OK)      {        dialogFileName = dialog.FileName;        dtExcel = ExcelToDataTable(dialogFileName, "sheet1", true);      }    }/// <summary>  /// Excel轉Datatable  /// </summary>  /// <param name="fileName">文件名含后綴名</param>  /// <param name="sheetName">Excel文件,頁名稱</param>  /// <param name="isFirstRowColumn">是否將第一列作為表頭</param>  /// <returns></returns>  private DataTable ExcelToDataTable(string fileName, string sheetName, bool isFirstRowColumn)  {   IWorkbook workbook = null;   FileStream fs = null;   ISheet sheet = null;   DataTable data = new DataTable();   int startRow = 0;   try   {    fs = new FileStream(fileName, FileMode.Open, FileAccess.Read);    if (fileName.IndexOf(".xlsx") > 0) // 2007版本     workbook = new XSSFWorkbook(fs);    else if (fileName.IndexOf(".xls") > 0) // 2003版本     workbook = new HSSFWorkbook(fs);    if (sheetName != null)    {     sheet = workbook.GetSheet(sheetName);     if (sheet == null) //如果沒有找到指定的sheetName對應的sheet,則嘗試獲取第一個sheet     {      sheet = workbook.GetSheetAt(0);     }    }    else    {     sheet = workbook.GetSheetAt(0);    }    if (sheet != null)    {     IRow firstRow = sheet.GetRow(0);     int cellCount = firstRow.LastCellNum; //一行最后一個cell的編號 即總的列數     if (isFirstRowColumn)     {      for (int i = firstRow.FirstCellNum; i < cellCount; ++i)      {       ICell cell = firstRow.GetCell(i);       if (cell != null)       {        string cellValue = cell.StringCellValue;        if (cellValue != null)        {         DataColumn column = new DataColumn(cellValue);         data.Columns.Add(column);        }       }      }      startRow = sheet.FirstRowNum + 1;     }     else     {      startRow = sheet.FirstRowNum;     }     //最后一列的標號     int rowCount = sheet.LastRowNum;     for (int i = startRow; i <= rowCount; ++i)     {      IRow row = sheet.GetRow(i);      if (row == null) continue; //沒有數據的行默認是null             DataRow dataRow = data.NewRow();      for (int j = row.FirstCellNum; j < cellCount; ++j)      {       if (row.GetCell(j) != null) //同理,沒有數據的單元格都默認是null        dataRow[j] = row.GetCell(j).ToString();      }      data.Rows.Add(dataRow);     }    }    return data;   }   catch (Exception ex)   {    MyMessageBox.Show(ex.Message);    return null;   }  }

文件下載:

private void DownLoad()  {   if (impdefineBM != null)   {    FolderBrowserDialog path = new FolderBrowserDialog();    path.ShowDialog();    if (path != null && path.SelectedPath != "")    {     string url = @"http://192.168.1.1/XX.xls";  //下載地址     string name = "FileName";              // 文件名稱     string savefilepath = path.SelectedPath + "http://" + name + url.Substring(url.LastIndexOf(".")); //注意:下載文件名的命名 ,可根據實際需求調整調用的文件創建方式     MultiDownload download = new MultiDownload(5, url, savefilepath); //調用多線程下載     download.Start();    }   }  } #region 多線程下載  public class MultiDownload  {   #region 變量   private int _threadNum;    //線程數量   private long _fileSize;    //文件大小   private string _fileUrl;   //文件地址   private string _fileName;   //文件名   private string _savePath;   //保存路徑   private short _threadCompleteNum; //線程完成數量   private bool _isComplete;   //是否完成   private volatile int _downloadSize; //當前下載大小(實時的)   private Thread[] _thread;   //線程數組   private List<string> _tempFiles = new List<string>();   private object locker = new object();   #endregion   #region 屬性   /// <summary>   /// 文件名   /// </summary>   public string FileName   {    get    {     return _fileName;    }    set    {     _fileName = value;    }   }   /// <summary>   /// 文件大小   /// </summary>   public long FileSize   {    get    {     return _fileSize;    }   }   /// <summary>   /// 當前下載大小(實時的)   /// </summary>   public int DownloadSize   {    get    {     return _downloadSize;    }   }   /// <summary>   /// 是否完成   /// </summary>   public bool IsComplete   {    get    {     return _isComplete;    }   }   /// <summary>   /// 線程數量   /// </summary>   public int ThreadNum   {    get    {     return _threadNum;    }   }   /// <summary>   /// 保存路徑   /// </summary>   public string SavePath   {    get    {     return _savePath;    }    set    {     _savePath = value;    }   }   #endregion   /// <summary>   /// 構造函數   /// </summary>   /// <param name="threahNum">線程數量</param>   /// <param name="fileUrl">文件Url路徑</param>   /// <param name="savePath">本地保存路徑</param>   public MultiDownload(int threahNum, string fileUrl, string savePath)   {    this._threadNum = threahNum;    this._thread = new Thread[threahNum];    this._fileUrl = fileUrl;    this._savePath = savePath;   }   public void Start()   {    HttpWebRequest request = (HttpWebRequest)WebRequest.Create(_fileUrl);    HttpWebResponse response = (HttpWebResponse)request.GetResponse();    _fileSize = response.ContentLength;    int singelNum = (int)(_fileSize / _threadNum);  //平均分配    int remainder = (int)(_fileSize % _threadNum);  //獲取剩余的    request.Abort();    response.Close();    for (int i = 0; i < _threadNum; i++)    {     List<int> range = new List<int>();     range.Add(i * singelNum);     if (remainder != 0 && (_threadNum - 1) == i) //剩余的交給最后一個線程      range.Add(i * singelNum + singelNum + remainder - 1);     else      range.Add(i * singelNum + singelNum - 1);     //下載指定位置的數據     int[] ran = new int[] { range[0], range[1] };     _thread[i] = new Thread(new ParameterizedThreadStart(Download));     _thread[i].Name = System.IO.Path.GetFileNameWithoutExtension(_fileUrl) + "_{0}".Replace("{0}", Convert.ToString(i + 1));     _thread[i].Start(ran);    }    //MessageBox.Show("下載完成!");   }   private void Download(object obj)   {    Stream httpFileStream = null, localFileStram = null;    try    {     int[] ran = obj as int[];     string tmpFileBlock = System.IO.Path.GetTempPath() + Thread.CurrentThread.Name + ".tmp";     _tempFiles.Add(tmpFileBlock);     HttpWebRequest httprequest = (HttpWebRequest)WebRequest.Create(_fileUrl);     httprequest.AddRange(ran[0], ran[1]);     HttpWebResponse httpresponse = (HttpWebResponse)httprequest.GetResponse();     httpFileStream = httpresponse.GetResponseStream();     localFileStram = new FileStream(tmpFileBlock, FileMode.Create);     byte[] by = new byte[5000];     int getByteSize = httpFileStream.Read(by, 0, (int)by.Length); //Read方法將返回讀入by變量中的總字節數     while (getByteSize > 0)     {      Thread.Sleep(20);      lock (locker) _downloadSize += getByteSize;      localFileStram.Write(by, 0, getByteSize);      getByteSize = httpFileStream.Read(by, 0, (int)by.Length);     }     lock (locker) _threadCompleteNum++;    }    catch (Exception ex)    {     throw new Exception(ex.Message.ToString());    }    finally    {     if (httpFileStream != null) httpFileStream.Dispose();     if (localFileStram != null) localFileStram.Dispose();    }    if (_threadCompleteNum == _threadNum)    {     Complete();     _isComplete = true;    }   }   /// <summary>   /// 下載完成后合并文件塊   /// </summary>   private void Complete()   {    Stream mergeFile = null;    BinaryWriter AddWriter = null;    try    {     using (mergeFile = new FileStream(@_savePath, FileMode.Create)) //根據實際情況調整FileMode     {      AddWriter = new BinaryWriter(mergeFile);      foreach (string file in _tempFiles)      {       using (FileStream fs = new FileStream(file, FileMode.Open))       {        BinaryReader TempReader = new BinaryReader(fs);        AddWriter.Write(TempReader.ReadBytes((int)fs.Length));        TempReader.Close();       }       File.Delete(file);      }     }     MyMessageBox.Show("下載完成!");    }    catch (Exception ex)    {     throw new Exception(ex.Message);    }    finally    {     if (AddWriter != null)     {      AddWriter.Close();      AddWriter.Dispose();     }     if (mergeFile != null)     {      mergeFile.Close();      mergeFile.Dispose();     }    }   }  }

總結

以上所述是小編給大家介紹的C# 文件上傳下載(Excel導入,多線程下載)功能的實現代碼,希望對大家有所幫助,如果大家有任何疑問請給我留言,小編會及時回復大家的。在此也非常感謝大家對武林網網站的支持!

發表評論 共有條評論
用戶名: 密碼:
驗證碼: 匿名發表
主站蜘蛛池模板: 宜城市| 津市市| 伊吾县| 法库县| 绵竹市| 仙游县| 汉源县| 鸡东县| 枣庄市| 阿拉善左旗| 黄平县| 左云县| 太仆寺旗| 尼勒克县| 申扎县| 泗洪县| 澄迈县| 闻喜县| 盘锦市| 贵港市| 洪湖市| 那曲县| 介休市| 增城市| 即墨市| 漳平市| 龙岩市| 丁青县| 仁怀市| 明溪县| 田林县| 高邮市| 崇文区| 从江县| 余姚市| 察哈| 巨鹿县| 孟津县| 布拖县| 岳西县| 新巴尔虎右旗|