我如何给出一个带有数字的文件名,但是在所有文件得到名字后计算++数字?

时间:2017-03-05 21:59:44

标签: c# .net winforms

我的意思是我第一次将40个文件下载到硬盘上。 我第一次想为每个文件名添加一个数字:000000.png 例如:First ___ 000000.png 然后:两个____ 000000.png 然后三____ 000000.png

现在所有文件都将下载到每个拥有diffrenet名称但编号相同的目录。例如,First ___ 000000.png将在目录First中。目录二中有两个___ 000000.png,依此类推。这部分工作正常我的问题是,15分钟后我再次下载文件这次我想把数字增加1.所以现在它应该是:首___ 000001.png和两___ 000001.png和三___ 000001.png并且它将被保存/下载到目录First和Two and Three,每个目录将有两个文件:First ___ 000000.png和First ___ 000001.png等等。

public FileStream LocalDirectorySettings(FileInfo file)
        {
            try
            {
                string path = Path.Combine(LocalDirectory, file.Name);
                string fileName = Path.Combine(path, file.Name + "---" + countFilesNames++.ToString("D6") + ".png");

                if (!Directory.Exists(path))
                {
                    Directory.CreateDirectory(path);
                }

                return new FileStream(fileName, System.IO.FileMode.Create);
            }
            catch (Exception err)
            {
                throw;
            }
        }

现在的问题是我将在目录Ten中有一个文件名:Ten ___ 000010.png而不是Ten ___ 000000.png

我可以设置countFilesNames在每次下载后将其重置为0,但是当我再次下载文件时,我将如何将其更改为1 countFilesNames = 1?

2 个答案:

答案 0 :(得分:0)

我明白你想要什么,但此时你的代码不容错。考虑如果您的客户端在中途崩溃并且只从40中下载20个文件会发生什么。您的计数器queue_without_element/3现在已经消失,之前下载的所有文件将重新写入一些新副本,但文件未到达然而第二轮将保留在他们的文件夹中。这里来了一团糟。

如果不扫描文件夹中已下载的文件,就没有其他方法可以做到这一点,例如countFilesNamesFirst,...,Two等。

只有在扫描目录结构后,您才能识别已存在的文件并将计数器恢复为正确的值。

我希望你知道如何编写所有相关代码。

答案 1 :(得分:0)

对于一次性操作,ne只能使用常量后缀:

string fileName = Path.Combine(path, file.Name + "---000000.png");

由于每个文件夹都可以进行多次下载,请检查文件夹中的文件计数,并将其用作新文件名称的一部分:

var fileCount = Directory.GetFiles(path).Length;
string fileName = Path.Combine(path, file.Name + "---" + fileCount.ToString("D6") + ".png");