我的代码当前编写的方式,它会将文件名更改为当前日期,然后将其移动到子目录中的已完成文件夹。一切正常。
我正在尝试实现的是能够使用不同的数字重命名它,如果有重复的话。基本上,如果文件已经存在于已完成的文件夹中,它会将其重命名为“日期”(1).csv。
我的问题是因为我被设置为1,即使我递增i,它也会将其重置为1.我只是希望它在代码运行时保持递增的值。如果文件夹中有三个文件从中检索,我希望它将它们标记为“日期”,“日期”(1)和“日期”(2)。然后,如果代码明天再次运行,它将开始计数。我的代码很可能永远不会在文件夹中遇到多个文件。我想将此作为一种安全措施来实现。如果由于某种原因,文件夹中有多个文件,我希望我的代码仍能运行。
这是我到目前为止所做的:
int i = 1;
var newFileName = DateTime.Now.ToString("MMddyyyy") + ".csv";
destinationPath = Path.Combine(GenesisDirectory, "Completed");
Directory.CreateDirectory(destinationPath);
var destinationFileName = Path.GetFileName(newFileName);
destinationPath = Path.Combine(destinationPath, destinationFileName);
if (File.Exists(destinationPath))
{
newFileName = DateTime.Now.ToString("MMddyyyy") + "(" + i + ")" + ".csv";
destinationFileName = Path.GetFileName(newFileName);
var Dironly = Path.GetDirectoryName(destinationPath);
destinationPath = Path.Combine(Dironly, destinationFileName);
i++;
}
File.Move(inputFile, destinationPath);
答案 0 :(得分:0)
您可能希望将计数器设置为静态,以便在调用过程中保持不变。您将需要将其移出任何方法来执行此操作。有更好的方法可以做到这一点,但是通过不提供更多代码,您在某种程度上限制了解决方案的范围。
答案 1 :(得分:0)
private static int s_Counter = 1;
public static IncrementCounter () { Interlocked.Increment(ref s_Counter); }
public static int Counter { get { return s_Counter; } }
我们使用Interlocked.Increment
代替s_Counter += 1
,以防您以后决定使代码多线程化。 (通常,静态方法/属性应设计为线程安全的。)
答案 2 :(得分:0)
您可以将其设置为静态以使值在调用期间保持不变,但如果重新启动应用程序将导致某些不良行为,则计数器值将重置。 最佳做法是将计数器值存储在数据库或文件中,这样即使重新启动应用程序,您也可以访问更新的计数器值,并且代码将正确。