谁能帮我看看这段代码怎么回事

俺老刘 2017-06-23 12:54:55

我的目的是把每个文本文件生成一个新文件
但是结果是我选择了n个文件就生成一个名为n.txt的文件




using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.IO;
using System.Linq;
using System.Text;
using System.Text.RegularExpressions;
using System.Threading.Tasks;
using System.Windows.Forms;


namespace wordCut
{
public partial class Cut : Form
{
public Cut()
{
InitializeComponent();
}

private void btnSelect_Click(object sender, EventArgs e)
{
OpenFileDialog ofd = new OpenFileDialog();
ofd.Filter = "txt文件|*.txt|所有文件|*.*";
ofd.ValidateNames = true;
ofd.CheckPathExists = true;
ofd.CheckFileExists = true;
ofd.Multiselect = true;
ofd.InitialDirectory = "F:\\txt\\";
if (ofd.ShowDialog() == DialogResult.OK)
{
foreach (string s in ofd.FileNames)
{
if (!txtFrom.Items.Contains(s))
{
txtFrom.Items.Add(s);
}

}
}
}

private void btnClear_Click(object sender, EventArgs e)
{
txtFrom.Items.Clear();
}

private void btnSavepath_Click(object sender, EventArgs e)
{
FolderBrowserDialog folder = new FolderBrowserDialog();
folder.Description = "选择所有文件存放目录";
if (folder.ShowDialog() == DialogResult.OK)
{

string sPath = folder.SelectedPath;
//MessageBox.Show(sPath);
savePath.Text = sPath;
}
}

private void btnCreat_Click(object sender, EventArgs e)
{
DateTime dt1 = System.DateTime.Now;//程序计时,统计处理时间

//循环读取文件开始
int num = txtFrom.Items.Count;
Task[] t = new Task[num];//创建任务数组

Control.CheckForIllegalCrossThreadCalls = false;


for (int i = 0; i < num; i++)
{
string path = txtFrom.Items[i].ToString();
t[i] = Task.Factory.StartNew(delegate { txtDeal(path,i); });
}
Task.WaitAll(t);
//循环读取文件并处理结束

/*
Task t0 = Task.Factory.StartNew(delegate { txtDeal(txtFrom.Items[0].ToString(), 0); });
Task t1 = Task.Factory.StartNew(delegate { txtDeal(txtFrom.Items[1].ToString(), 1); });
Task t2 = Task.Factory.StartNew(delegate { txtDeal(txtFrom.Items[2].ToString(), 2); });
* */
DateTime dt2 = System.DateTime.Now;
TimeSpan ts = dt2.Subtract(dt1);
MessageBox.Show("生成结束,共用时" + ts.ToString());
}
private void txtDeal(string path,int k)
{
int clen = int.Parse(txtClen.Text);//生成的字符串长度
string s = "";//处理过的文件
FileStream fs = new FileStream(path, FileMode.Open, FileAccess.Read);
StreamReader read = new StreamReader(fs, Encoding.Default);
string line;
int strlen = 0;
while ((line = read.ReadLine()) != null)
{
strlen++;
}
//label1.Text = path + "共" + strlen.ToString() + "行";
strlen = 0;//重置用于统计完成了第几行
read.BaseStream.Seek(0, SeekOrigin.Begin);

while ((line = read.ReadLine()) != null)
{

line = Regex.Replace(line, "[,.?!,。?!::abcdefghigklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ()()\n\r]", "");
int linelen = line.Length;
for (int j = 0; j < linelen-clen; j = j + clen)
{
s = s + line.Substring(j, clen) + "\r\n";
}
//listBox1.Items.Insert(0,linen.ToString() + "处理完毕\r\n")
//strlen++;//统计完成了第几行

// label2.Text = path + strlen.ToString() + "行处理完毕\r\n";
}
fs.Close();
read.Close();
//生成保存文件路径
string savep = savePath.Text;
savep = savep + "\\" + k.ToString() + ".txt";
FileStream fsw = new FileStream(savep, FileMode.Create, FileAccess.Write);
StreamWriter sw = new StreamWriter(fsw);
sw.Write(s);
sw.Close();
fsw.Close();

//替换完一个文件
listBox1.Items.Add(path + "处理完毕\r\n");

}
static void TaskMethod()
{
Console.WriteLine("running in a task");
Console.WriteLine("Task id: {0}", Task.CurrentId);
}
}
}

...全文
194 6 打赏 收藏 转发到动态 举报
写回复
用AI写文章
6 条回复
切换为时间正序
请发表友善的回复…
发表回复
俺老刘 2017-06-23
  • 打赏
  • 举报
回复
         for (int i = 0; i < num; i++)
            {
                string path = txtFrom.Items[i].ToString();
                txtDeal(path, i);

               // t[i] = Task.Factory.StartNew(delegate { txtDeal(path,i); });
            }
主要是那个Tast没用对 如果不用的话就没问题
俺老刘 2017-06-23
  • 打赏
  • 举报
回复
引用 5 楼 sp1234 的回复:
for (int i = 0; i < num; i++)
{
    var j = i;
声明个J不知做什么,这和哪个p有联系吗,是不是笔误?
  • 打赏
  • 举报
回复
for (int i = 0; i < num; i++)
{
    var j = i;
  • 打赏
  • 举报
回复
         for (int i = 0; i < num; i++)
{
    var j = i;
俺老刘 2017-06-23
  • 打赏
  • 举报
回复

兄弟,是不是哪个地方搞错了
xuzuning 2017-06-23
  • 打赏
  • 举报
回复
t[i] = Task.Factory.StartNew((p) => { txtDeal(path, p); }, i);

110,533

社区成员

发帖
与我相关
我的任务
社区描述
.NET技术 C#
社区管理员
  • C#
  • Web++
  • by_封爱
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告

让您成为最强悍的C#开发者

试试用AI创作助手写篇文章吧