C# 为什么在使用计数器给文件名和名称编号时,它';他给了它奇怪的数字?
硬盘上第一个保存的文件名是:201701311645---0,然后是201701311645---1,然后是201701311645---20,然后是201701311645---21,然后是201701311645---40和201701311645---41 但我希望它被保存为:201701311645---0然后201701311645---1然后201701311645---2然后201701311645---3然后201701311645---4和201701311645---5 在顶部,我添加了一个计数器变量C# 为什么在使用计数器给文件名和名称编号时,它';他给了它奇怪的数字?,c#,.net,winforms,C#,.net,Winforms,硬盘上第一个保存的文件名是:201701311645---0,然后是201701311645---1,然后是201701311645---20,然后是201701311645---21,然后是201701311645---40和201701311645---41 但我希望它被保存为:201701311645---0然后201701311645---1然后201701311645---2然后201701311645---3然后201701311645---4和201701311645---5 在顶
private int countFilesNames = 0;
然后在dowork事件中,我还将计数器重置为0一次,因此如果我再次启动backgroundworker,它将从0开始
private void bgwDownloader_DoWork(object sender, DoWorkEventArgs e)
{
Int32 fileNr = 0;
countFilesNames = 0;
if (this.SupportsProgress) { calculateFilesSize(); }
if (!Directory.Exists(this.LocalDirectory)) { Directory.CreateDirectory(this.LocalDirectory); }
while (fileNr < this.Files.Count && !bgwDownloader.CancellationPending)
{
m_fileNr = fileNr;
downloadFile(fileNr);
if (bgwDownloader.CancellationPending)
{
fireEventFromBgw(Event.DeletingFilesAfterCancel);
cleanUpFiles(this.DeleteCompletedFilesAfterCancel ? 0 : m_fileNr, this.DeleteCompletedFilesAfterCancel ? m_fileNr + 1 : 1);
}
else
{
fileNr += 1;
}
}
}
将计数器向前移动1:
countFilesNames += 1;
但我得到了我想要的其他文件名
也许有更好的方法给文件名一些标识?问题是,如果我不给文件名一些标识,它会一直覆盖文件。文件名相同,但内容不同,因此我需要为每个文件指定另一个名称。为什么不在写入文件时(因为变量看起来不像在其他地方被访问)而不是在下面增加计数器
writer = new FileStream(this.LocalDirectory + "\\" + file.Name +
"---" + countFilesNames++ + ".png", System.IO.FileMode.Create);
这样计数器就不会因错误而递增。我将从以下内容开始:,
使用调试器并逐步完成代码
此外,我会重构此代码,并将功能分解为更易于管理/可读的代码块/方法。这非常复杂,至少可以说,你只是抱怨文件的字典顺序?如果要更改顺序,Windows将始终在201701311645--2.png之前显示201701311645--11.png,插入一个0,使其为201701311645--02.png,201701311645--11.png。
countFilesNames += 1;
writer = new FileStream(this.LocalDirectory + "\\" + file.Name +
"---" + countFilesNames++ + ".png", System.IO.FileMode.Create);