C# winform根据EXCEL匹配文件后将txt的图片分别下载到指定的文件夹里
1、EXCEL文件ID
2、生成的文件夹
csharp
showinthz = showinthz + creatpath.Count;
//string fNamestr = Path.GetFileNameWithoutExtension(path);
//string[] sstr1 = fNamestr.Split('_');
string directoryPath = Path.GetDirectoryName(input_Excel.Text);
var filesData = new List<FileContent>();
//处理并生成处理文件
var processor = new ParallelFileProcessor();
var tasks = new List<FolderTask>();
List<string> strhttp = new List<string>();
List<string> nostr = new List<string>();
string[] allLines = File.ReadAllLines(filepath, Encoding.GetEncoding("GBK"));
List<string> linesList = allLines.ToList();
List<string> linesonrcout = new List<string>();
//排除重复后再判断
foreach (var line in linesList)
{
string specialPrefix = "&*&*&*&*";
bool startsWithSpecialPrefix = line.StartsWith(specialPrefix);
if (!startsWithSpecialPrefix)
{
bool isContained = linesonrcout.Contains(line);
if (!isContained)
{
linesonrcout.Add(line);
}
}
}
allLines = linesonrcout.ToArray();
if (allLines.Length < 3)
{
string pteh = Path.GetFileName(filepath);
string[] ssrt = pteh.Split('_');
var row = new DataGridViewRow();
row.CreateCells(dgvdata_Err_show);
row.Cells[0].Value = showintkk;
showintkk++;
row.Cells[1].Value = ssrt[0];
row.Cells[2].Value = allLines.Length;
await Task.Run(() =>
{
this.dgvdata_Err_show.BeginInvoke((MethodInvoker)delegate
{
dgvdata_Err_show.Rows.Add(row);
});
});
//string pteh = Path.GetFileName(filepath);
//string[] ssrt = pteh.Split('_');
//加入视图看
//Show_Err_list.Items.Add(ssrt[0] + "---行数:" + allLines.Length.ToString());
}
foreach (string line in allLines)
{
string specialPrefix = "&*&*&*&*";
bool startsWithSpecialPrefix = line.StartsWith(specialPrefix);
if (!startsWithSpecialPrefix)
{
string pattern = "http";
Regex regex = new Regex(pattern);
Match match = regex.Match(line);
if (match.Success)
{
if (!strhttp.Contains(line))
{
strhttp.Add(line);//待随机的有效链接队列
}
}
else
{
if (!nostr.Contains(line))
{
nostr.Add(line);//待随机的无链接的队列
}
}
}
} //按顺序分别把带连接的和不带链接的放进去list
List<string> sshucun = new List<string>();//存放最后一次http乱序的结果
List<string> sshucunt1 = new List<string>();//存放不是http最后一次乱序的连接
int cc = 0;
int wenjian = 1;
foreach (string creatname in creatpath)
{
jinduadd++;
//创建文件夹并乱序
string Fname = directoryPath + "\\" + "生成的文件\\" + creatname;
if (!Directory.Exists(Fname))
{
Directory.CreateDirectory(Fname);
}
var shuffler = new ConditionalShuffler();
try
{
if (cc == 0)
{
#region 处理第一次连接的数组
if (strhttp.Count > 2)
{
var shuffled = shuffler.ShuffleWithCondition(strhttp);
sshucun = shuffled;
}
else
{
sshucun = strhttp;
}
foreach (string s in sshucun)
{
if (!string.IsNullOrEmpty(s))
{
string wenjianname = Fname + "\\" + wenjian;
if (!Directory.Exists(wenjianname))
{
Directory.CreateDirectory(wenjianname);
string specialPrefix1 = "&*&*&*&*";
bool startsWithSpecialPrefix1 = s.StartsWith(specialPrefix1);
if (!startsWithSpecialPrefix1)
{
FolderTask tts = new FolderTask();
//tasks.Add(new FolderTask { TargetPath = wenjianname, Contentxt = PingJia, });
var matches = Regex.Matches(s, @"&*\*&*\*&*\*&*\*(.*?)&*\*&*\*&*\*&*\*");
string[] pjstr = s.Split(new[] { "&*&*&*&*" }, StringSplitOptions.RemoveEmptyEntries);
if (pjstr.Length >= 1)
{
string PingJia = pjstr[0].ToString();//评价
string filePath = wenjianname + "\\" + "评价.txt";
//SafeWriteFile(filePath, PingJia);
//await Task.Run(() => { File.WriteAllText(filePath, PingJia, Encoding.UTF8); });
tts.TargetPath = wenjianname;
tts.Contentxt = PingJia;
//File.WriteAllText(filePath, PingJia, Encoding.UTF8);
};
int imcout = 1;
int imgname = 1;
foreach (Match match in matches)
{
string kk = match.ToString();
string pattern = "----";
Regex regex1 = new Regex(pattern);
Match match1 = regex1.Match(kk);
if (match1.Success)
{
var urls = match.Groups[1].Value.Split(new[] { "----" }, StringSplitOptions.RemoveEmptyEntries);
//var converter = new ImageDownloader();
foreach (var item in urls)
{
if (item.Trim() != "")
{
string imnamepath = wenjianname + "\\" + imgname + ".jpg";
listtupian.Add(item);
tts.ImageUrls.Add(item);
tts.ImageUrlspath.Add(imnamepath);
//await converter.DownloadImageAsync(item, imnamepath, _httpClient);
imgname++;
}
}
}
else
{
var urls = match.Groups[1].Value.Split(new[] { "" }, StringSplitOptions.RemoveEmptyEntries);
//var converter = new ImageDownloader();
foreach (var item in urls)
{
if (item.Trim() != "")
{
string imnamepath = wenjianname + "\\" + imgname + ".jpg";
listtupian.Add(item);
tts.ImageUrls.Add(item);
tts.ImageUrlspath.Add(imnamepath);
//await converter.DownloadImageAsync(item, imnamepath, _httpClient);
imgname++;
}
}
}
imcout++;
}
tasks.Add(tts);
}
}
}
wenjian++;
}
#endregion
#region 处理没有链接的数组
if (nostr.Count > 2)
{
var shuffled2 = shuffler.ShuffleWithCondition(nostr);
sshucunt1 = shuffled2;
}
else
{
sshucunt1 = nostr;
}
//处理不带http的
foreach (string ss in sshucunt1)
{
if (!string.IsNullOrEmpty(ss))
{
string wenjianname = Fname + "\\" + wenjian;
if (!Directory.Exists(wenjianname))
{
Directory.CreateDirectory(wenjianname);
string specialPrefix2 = "&*&*&*&*";
bool startsWithSpecialPrefix2 = ss.StartsWith(specialPrefix2);
if (!startsWithSpecialPrefix2)
{
FolderTask tts = new FolderTask();
var matches = Regex.Matches(ss, @"&*\*&*\*&*\*&*\*(.*?)&*\*&*\*&*\*&*\*");
string[] pjstr = ss.Split(new[] { "&*&*&*&*" }, StringSplitOptions.RemoveEmptyEntries);
if (pjstr.Length >= 1)
{
string PingJia = pjstr[0].ToString();//评价
string filePath = wenjianname + "\\" + "评价.txt";
tts.TargetPath = wenjianname;
tts.Contentxt = PingJia;
//SafeWriteFile(filePath, PingJia);
//await Task.Run(() => { File.WriteAllText(filePath, PingJia, Encoding.UTF8); });
//File.WriteAllText(filePath, PingJia, Encoding.UTF8);
};
tasks.Add(tts);
}
}
}
wenjian++;
}
#endregion
cc = 1;
}
else
{
wenjian = 1;
//处理二次集合的连接数据
if (sshucun.Count > 2)
{
var shuffled = shuffler.ShuffleWithCondition(sshucun);
sshucun = shuffled;
}
foreach (string s in sshucun)
{
if (!string.IsNullOrEmpty(s))
{
string wenjianname = Fname + "\\" + wenjian;
if (!Directory.Exists(wenjianname))
{
Directory.CreateDirectory(wenjianname);
string specialPrefix1 = "&*&*&*&*";
bool startsWithSpecialPrefix1 = s.StartsWith(specialPrefix1);
if (!startsWithSpecialPrefix1)
{
FolderTask tts = new FolderTask();
var matches = Regex.Matches(s, @"&*\*&*\*&*\*&*\*(.*?)&*\*&*\*&*\*&*\*");
string[] pjstr = s.Split(new[] { "&*&*&*&*" }, StringSplitOptions.RemoveEmptyEntries);
if (pjstr.Length >= 1)
{
string PingJia = pjstr[0].ToString();//评价
string filePath = wenjianname + "\\" + "评价.txt";
tts.TargetPath = wenjianname;
tts.Contentxt = PingJia;
//SafeWriteFile(filePath, PingJia);
//await Task.Run(() => { File.WriteAllText(filePath, PingJia, Encoding.UTF8); });
//File.WriteAllText(filePath, PingJia, Encoding.UTF8);
};
int imcout = 1;
int imgname = 1;
foreach (Match match in matches)
{
string kk = match.ToString();
string pattern = "----";
Regex regex1 = new Regex(pattern);
Match match1 = regex1.Match(kk);
if (match1.Success)
{
var urls = match.Groups[1].Value.Split(new[] { "----" }, StringSplitOptions.RemoveEmptyEntries);
var converter = new ImageDownloader();
foreach (var item in urls)
{
string imnamepath = wenjianname + "\\" + imgname + ".jpg";
listtupian.Add(item);
tts.ImageUrls.Add(item);
tts.ImageUrlspath.Add(imnamepath);
//await converter.DownloadImageAsync(item, imnamepath, _httpClient);
imgname++;
}
}
else
{
var urls = match.Groups[1].Value.Split(new[] { "" }, StringSplitOptions.RemoveEmptyEntries);
var converter = new ImageDownloader();
foreach (var item in urls)
{
string imnamepath = wenjianname + "\\" + imgname + ".jpg";
listtupian.Add(item);
tts.ImageUrls.Add(item);
tts.ImageUrlspath.Add(imnamepath);
//await converter.DownloadImageAsync(item, imnamepath, _httpClient);
imgname++;
}
}
imcout++;
}
tasks.Add(tts);
}
}
}
wenjian++;
}
//处理二次集合没有链接的数据
if (sshucunt1.Count > 2)
{
var shuffled2 = shuffler.ShuffleWithCondition(sshucunt1);
sshucunt1 = shuffled2;
}
//处理不带http的
foreach (string ss in sshucunt1)
{
if (!string.IsNullOrEmpty(ss))
{
string wenjianname = Fname + "\\" + wenjian;
if (!Directory.Exists(wenjianname))
{
Directory.CreateDirectory(wenjianname);
string specialPrefix2 = "&*&*&*&*";
bool startsWithSpecialPrefix2 = ss.StartsWith(specialPrefix2);
if (!startsWithSpecialPrefix2)
{
FolderTask tts = new FolderTask();
var matches = Regex.Matches(ss, @"&*\*&*\*&*\*&*\*(.*?)&*\*&*\*&*\*&*\*");
string[] pjstr = ss.Split(new[] { "&*&*&*&*" }, StringSplitOptions.RemoveEmptyEntries);
if (pjstr.Length >= 1)
{
string PingJia = pjstr[0].ToString();//评价
string filePath = wenjianname + "\\" + "评价.txt";
tts.TargetPath = wenjianname;
tts.Contentxt = PingJia;
//SafeWriteFile(filePath, PingJia);
//await Task.Run(() => { File.WriteAllText(filePath, PingJia, Encoding.UTF8); });
//File.WriteAllText(filePath, PingJia, Encoding.UTF8);
};
tasks.Add(tts);
}
}
}
wenjian++;
}
}
await processor.ProcessFoldersAsync(tasks);
//MessageBox.Show("已完成!");
//btn_Creat.Enabled = true;
}
catch (Exception)
{
throw;
}
}
//lbl_showlbl;
this.lbl_showlbl.BeginInvoke((MethodInvoker)async delegate
{
lbl_showlbl.Text = "生成进度:" + jinduadd + "/" + showinthz;
});