using Microsoft.AspNetCore.Mvc;
using MySql.Data.MySqlClient;
using System;
using System.Collections.Generic;
using System.Diagnostics;
using System.Linq;
using System.Text;
using System.Threading.Tasks; namespace TestCoreDemo.Controllers
{
using System.IO;
using Microsoft.AspNetCore.Hosting;
using Microsoft.Extensions.FileProviders; public class UpdateGalleryTypeController : Controller
{
private IWebHostEnvironment _env;
private IFileProvider _fileProvider;
public UpdateGalleryTypeController(IWebHostEnvironment env, IFileProvider fileProvider)
{
this._env = env; this._fileProvider = fileProvider;
}
public IActionResult Index()
{
string msg = "";
//DoUpdateBigData(out msg);//--大批量更新数据
//DoBigDataInsert(out msg);//-------大数据批量写入
string imgpath = Path.Combine(_env.WebRootPath, "smallimgs");
string toFilePath = Path.Combine(_env.WebRootPath, "newFilePath");
DirectoryInfo direcinfo = new DirectoryInfo(imgpath);
if (direcinfo != null && direcinfo.Exists)
{
int index = 1100000;
foreach (var item in direcinfo.GetFiles())
{
if (item is FileInfo)
{
index += 1;
string fileExStr = Path.GetExtension(item.Name);
string newfilePath = Path.Combine(toFilePath, index + fileExStr);
System.IO.File.Copy(item.FullName, newfilePath);//---读取一个文件夹下面的所有文件并命名
}
}
} ViewBag.result = msg;
return View(); }

//*---通常我们平时需要一些比较大的测试数据,一次性写入,或者写入到队列在持久化到数据库,感觉写入的效率差强人意(刷新数据库只有几十几十的新增)
//-----大批量的写入数据,测试中发现平均一秒写入的速度可达 400-500多条数据的样子,应该还有更高效的方法,欢迎大家给出宝贵的建议!
private void DoBigDataInsert(out string msg)
{
try
{
Stopwatch watch = new Stopwatch();
watch.Start();
string dbconnectionStr = "server=****;uid=fengge;pwd=qq88;port=3306;database=BigDataTest;sslmode=none;";
StringBuilder sb = new StringBuilder();
int index = 0;
for (int i = 0; i < 1000000; i++)
{
sb.Append("insert into Person(id,name,age)values('" + Guid.NewGuid().ToString() + "','name_" + new Random().Next(1, 99999) + "','" + new Random().Next(12, 38) + "');");
index = index + 1;
if (index % 500 == 0)
{
Task.Run(() => DoWork(sb.ToString(), dbconnectionStr)).Wait();
sb.Clear();
}
}
if (sb != null && sb.Length > 0)
{
DoWork(sb.ToString(), dbconnectionStr);
}
msg = "ok";
watch.Stop();
ViewBag.totalTime = watch.Elapsed.TotalSeconds;
}
catch (Exception ex)
{
msg = ex.Message;
}
}

     //---比较高效一点的大批量修改数据
     //--应该还有更高效的方法,欢迎大家指出,谢谢
private void DoUpdateBigData(out string msg)
{
try
{
string dbconnectionStr = "server=aaaa;uid=QQ;pwd=aa222;port=3306;database=zrfDb;sslmode=none;";
using (yiyuneduContext db = new yiyuneduContext())
{
var list = db.Gallery.Where(c => c.Gallerytype == null).Select(c => new { c.Galleryid, c.Gallerycontent });
StringBuilder sb = new StringBuilder();
int index = 0;
list.ToList().ForEach(c =>
{
var id = c.Galleryid;
string _type = c.Gallerycontent.Substring(c.Gallerycontent.LastIndexOf('.') + 1);
sb.Append("update gallery set gallerytype='" + _type + "' where galleryid='" + id + "';");
index = index + 1;
if (index % 200 == 0)
{
Task.Run(() => DoWork(sb.ToString(), dbconnectionStr)).Wait();
sb.Clear();
}
//update gallery set gallerytype=right(gallerycontent,3) where galleryid='FFA06D63-76E3-C31F-DE4B-EA30DAB78096';
});
if (sb != null && sb.Length > 0)
{
DoWork(sb.ToString(), dbconnectionStr);
}
}
msg = "ok";
}
catch (Exception ex)
{
msg = ex.Message;
}
} private void DoWork(string sql, string connectionDbStr)
{
using (MySqlConnection conn = new MySqlConnection(connectionDbStr))
{
conn.Open();
using (MySqlCommand comm = new MySqlCommand())
{
comm.CommandText = sql;
comm.CommandType = System.Data.CommandType.Text;
comm.Connection = conn;
comm.ExecuteNonQuery();
}
}
}
}
}

.NetCore3.1获取文件并重新命名以及大批量更新及写入数据的更多相关文章

  1. C#将文件转成16进制码流写入数据库存起来,访问的时候再还原成PDF文件。

    转自https://blog.csdn.net/liubowei_0312/article/details/53378146 适合将文件写入数据库,远程访问的时候还原1.首先把文件转成十六进制文件流 ...

  2. 牛客网Java刷题知识点之File对象常用功能:获取文件名称、获取文件路径、获取文件大小、获取文件修改时间、创建与删除、判断、重命名、查看系统根目录、容量获取、获取某个目录下内容、过滤器

    不多说,直接上干货! 获取文件名称.获取文件路径.获取文件大小.获取文件修改时间 FileMethodDemo.java package zhouls.bigdata.DataFeatureSelec ...

  3. lr文件下载脚本(文件参数化重命名)

    http://wenku.baidu.com/link?url=6oiIadyF9eFS4VshKbfJDnxrBh2IX919ndi0JO8yoqTRNRNIpavFrZJ9LPVb-FBSfbRY ...

  4. Web 在线文件管理器学习笔记与总结(11)获取文件夹信息 (12)返回上一级操作

    (11)获取文件夹信息 文件夹没有修改操作. index.php: <?php require 'dir.func.php'; require 'file.func.php'; require ...

  5. 运用CMD命令关于快速获取文件夹名称和快速建立文件夹

    前些天头儿让我建立一本本的文件夹,让后交给我了几个命令,快速获取文件夹的名称和快速建立文件夹,省去了一个个的按F2,一个个的复制,粘贴,一个个的新建,再复制粘贴. 首先讲一下第一个问题,快速获取文件夹 ...

  6. 【转】linux C++ 获取文件信息 stat函数详解

    stat函数讲解 表头文件:    #include <sys/stat.h>             #include <unistd.h>定义函数:    int stat ...

  7. 从字符串总分离文件路径、命名、扩展名,Substring(),LastIndexOf()的使用;替换某一类字符串,Replace()的用法

    一:从字符串总分离文件路径.命名.扩展名,上图 二:代码 using System; using System.Collections.Generic; using System.ComponentM ...

  8. stat(),lstat(),fstat() 获取文件/目录的相关信息

    stat 的使用 Linux有个命令,ls -l,效果如下: 这个命令能显示文件的类型.操作权限.硬链接数量.属主.所属组.大小.修改时间.文件名.它是怎么获得这些信息的呢,请看下面的讲解. stat ...

  9. [Python] python3 文件操作:从键盘输入、打开关闭文件、读取写入文件、重命名与删除文件等

    1.从键盘输入 Python 2有两个内置的函数用于从标准输入读取数据,默认情况下来自键盘.这两个函数分别是:input()和raw_input(). Python 3中,不建议使用raw_input ...

随机推荐

  1. python批量修改图片名称

    import os class BatchRename(): def rename(self): # windows环境 """ os.rename() 方法用于命名文件 ...

  2. (JAVA5)DOS命令

    (JAVA5)DOS命令 开启DOS控制台的几种方式 win + R 输入cmd打开控制台 在任意的文件夹下面,按住shift键 + 右键单击(在此处打开Powershell窗口) 资源管理器的地址前 ...

  3. Joomla 3.4.5 反序列化漏洞(CVE-2015-8562)

    影响版本 Joomla 1.5.x, 2.x, and 3.x before 3.4.6 PHP 5.6 < 5.6.13, PHP 5.5 < 5.5.29 and PHP 5.4 &l ...

  4. 大数据学习(03)——HDFS的高可用

    高可用架构图 先上一张搜索来的图. 如上图,HDFS的高可用其实就是NameNode的高可用. 上一篇里,SecondaryNameNode是NameNode单节点部署才会有的角色,它只帮助NameN ...

  5. Flutter集成高德定位和地图功能

    定位集成 配置高德定位依赖库 新建 Flutter 项目,使用 Android Studio 打开项目里的 android 工程,或者右键 android 目录-> flutter -> ...

  6. 又一开源项目爆火于GitHub,Android高级插件化强化实战

    一.插件化起源 插件化技术最初源于免安装运行 Apk的想法,这个免安装的 Apk 就可以理解为插件,而支持插件的 app 我们一般叫 宿主. 想必大家都知道,在 Android 系统中,应用是以 Ap ...

  7. 手把手和你一起实现一个Web框架实战——EzWeb框架(二)[Go语言笔记]Go项目实战

    手把手和你一起实现一个Web框架实战--EzWeb框架(二)[Go语言笔记]Go项目实战 代码仓库: github gitee 中文注释,非常详尽,可以配合食用 上一篇文章我们实现了框架的雏形,基本地 ...

  8. MySQL-14-备份恢复

    备份类型 1 热备 在业务正常时,对数据库进行备份数据,并且能够一致性恢复(只能是innodb) 对业务影响非常小 2 温备 锁表备份,只能查询不能修改(myisam) 影响到写入操作 3 冷备 关闭 ...

  9. 【笔记】多项式回归的思想以及在sklearn中使用多项式回归和pipeline

    多项式回归以及在sklearn中使用多项式回归和pipeline 多项式回归 线性回归法有一个很大的局限性,就是假设数据背后是存在线性关系的,但是实际上,具有线性关系的数据集是相对来说比较少的,更多时 ...

  10. DVWA(五):CSRF 全等级跨站请求伪造

    CSRF,全称Cross-site request forgery,翻译过来就是跨站请求伪造,是指利用受害者尚未失效的身份认证信息(cookie.会话等),诱骗其点击恶意链接或者访问包含攻击代码的页面 ...