我正在尝试不断重命名并将图像移动到另一个文件夹。此文件夹用于数据库,所以我试图将所有图像存储在此文件夹中。因此,我需要不断重命名每个图像,以便它们不会相互覆盖。 (一些重命名约定:images.jpg,images1.jpg,images2.jpg)
我看到了移动方法,但它不允许我不断更改文件名,并且可能使用for循环来循环它。但是,如果我要检测图像是否已经存在并转移到新名称? (示例:images1.jpg已经存在,但程序将替换它。)
任何想法如何解决这个问题?
答案 0 :(得分:1)
我在这里看到一些重新发明轮子的答案。
.net通过GetTempFileName和GetRandomFileName
涵盖了此方案使用获取随机文件名
string randomFileName = Path.GetRandomFileName();
//now save the file or whatever you want to do with it.
//you could also remove the trailing charcaters after the .
//and replace them with a meaningful extention. E.g. .jpg
答案 1 :(得分:0)
使用此:
var files = new List<string>();
foreach (var file in Directory.GetFiles(@"Your Location"))
{
var fileName = Path.GetFileNameWithoutExtension(file);
if (fileName.StartsWith("Image"))
{
files.Add(fileName.Replace("Image",""));
}
}
var last = int.Parse(files.OrderByDescending(f => f.ToString()).First()) + 1;
要获取下一个索引,只需将其移动到您需要的位置
答案 2 :(得分:0)
为什么不使用非常独特的GUID而不是重命名文件并不断地移动文件呢?
var myUniqueFileName = string.Format(@"{0}.jpg", Guid.NewGuid());
答案 3 :(得分:0)
。如果文件存在名称,则重命名文件名并将其移动到另一个文件夹
DirectoryInfo orginalLocation = new DirectoryInfo(@"C:\a");
DirectoryInfo DestinationLocation = new DirectoryInfo(@"C:\b");
List<string> fileNameInDestinationLocation = DestinationLocation.GetFiles("*.*").Select(s => Path.GetFileName(s.FullName)).ToList<string>();
FileInfo[] orginalLocationFiles = orginalLocation.GetFiles("*.*");
orginalLocationFiles.ToList<FileInfo>().ForEach(s => {
var fileName = Path.GetFileName(s.FullName);
while (fileNameInDestinationLocation.Contains(fileName))
{
Random r = new Random();
fileName = r.Next(100, 1000000).ToString() + fileName;
}
s.MoveTo(@"C:\b\" + fileName);
});