C# 如何在可选扩展名之前将随机字符串附加到文件名?

C# 如何在可选扩展名之前将随机字符串附加到文件名?,c#,string,algorithm,C#,String,Algorithm,目标:给定文件名和目录,如果目录中有同名文件,请在文件名后面附加一个“随机”数字字符串,并将其保存在目录中。不要假定文件名有扩展名 示例: somepic.jpg --> somepic19232139195.jpg somepic --> somepic19232139195.jpg string suffix = (DateTime.Now.Ticks / TimeSpan.TicksPerMillisecond).ToString(); int thisIndex =

目标:给定文件名和目录,如果目录中有同名文件,请在文件名后面附加一个“随机”数字字符串,并将其保存在目录中。不要假定文件名有扩展名

示例:

somepic.jpg --> somepic19232139195.jpg

somepic --> somepic19232139195.jpg
 string suffix = (DateTime.Now.Ticks / TimeSpan.TicksPerMillisecond).ToString();
 int thisIndex = newFilePath.LastIndexOf('.');
 newFilePath = newFilePath.Insert(thisIndex != -1 ? thisIndex : newFilePath.Length, suffix);
尝试解决方案:

somepic.jpg --> somepic19232139195.jpg

somepic --> somepic19232139195.jpg
 string suffix = (DateTime.Now.Ticks / TimeSpan.TicksPerMillisecond).ToString();
 int thisIndex = newFilePath.LastIndexOf('.');
 newFilePath = newFilePath.Insert(thisIndex != -1 ? thisIndex : newFilePath.Length, suffix);
问题:不适用于没有扩展名的文件,我不知道为什么
somepic
(无扩展名)在当前解决方案中变为
somepic

附加问题:

somepic.jpg --> somepic19232139195.jpg

somepic --> somepic19232139195.jpg
 string suffix = (DateTime.Now.Ticks / TimeSpan.TicksPerMillisecond).ToString();
 int thisIndex = newFilePath.LastIndexOf('.');
 newFilePath = newFilePath.Insert(thisIndex != -1 ? thisIndex : newFilePath.Length, suffix);

C#是否有我应该使用的整数类型,而不是上述代码中的
int
?它是否有一个保证字符串最大大小的整数类型,在C++中等价于<代码> siZeSt<<代码> > P> >我认为这个问题可以更好地解决。 试试这个

string extensionFile = newFilePath.GetExtension();
newFilePath = Path.GetFileNameWithoutExtension(newFilePath);
newFilePath += suffix;
newFilePath += string.IsNullOrEmpty(extensionFile) ? String.Empty : extensionFile;
更新: 如果您只有扩展名为“.gitignore”的文件,请转到Siada注释


我认为这个问题可以得到更好的解决

试试这个

string extensionFile = newFilePath.GetExtension();
newFilePath = Path.GetFileNameWithoutExtension(newFilePath);
newFilePath += suffix;
newFilePath += string.IsNullOrEmpty(extensionFile) ? String.Empty : extensionFile;
更新: 如果您只有扩展名为“.gitignore”的文件,请转到Siada注释


警告:如果您有一个名为“somepic.jpg”的文件(如示例中所示)“somepic”,您的代码可能会尝试将这些文件重命名为完全相同的名称,要么崩溃,要么覆盖。也就是说,在后缀更改之前,您可以处理大量文件

否则,假设所有文件都是“.jpg”,类似的方法应该可以工作:



警告:如果您有一个名为“somepic.jpg”的文件(如示例中所示)“somepic”,您的代码可能会尝试将这些文件重命名为完全相同的名称,要么崩溃,要么覆盖。也就是说,在后缀更改之前,您可以处理大量文件

否则,假设所有文件都是“.jpg”,类似的方法应该可以工作:



你知道,如果你有一个名为“somepic.jpg”和“somepic”的文件,你的代码可能会尝试将这些文件重命名为完全相同的名称,要么崩溃,要么重写。也就是说,你可以处理很多文件,直到你的后缀发生变化。查看而不是试图解析它。你知道,如果你有一个名为“somepic.jpg”和“somepic”的文件,你的代码可能会尝试将这些文件重命名为完全相同的名称,要么崩溃,要么重写。也就是说,在后缀更改之前,您可以处理大量文件。此解决方案的问题是,如果您的文件是例如“.gitignore”,这最终会破坏文件,因为它只是将.gitignore作为扩展名,并将后缀添加到开头而不是结尾,从而以“19232139195.gitignore”结尾。此解决方案的问题是,如果您的文件是例如.gitignore,这会破坏文件,因为它只会将.gitignore作为扩展名,并将后缀添加到开头而不是结尾,从而以“19232139195.gitignore”结束