如何不断重命名文件并移动它

时间:2014-08-04 05:49:50

标签: c# image directory move

我正在尝试不断重命名并将图像移动到另一个文件夹。此文件夹用于数据库,所以我试图将所有图像存储在此文件夹中。因此,我需要不断重命名每个图像,以便它们不会相互覆盖。 (一些重命名约定:images.jpg,images1.jpg,images2.jpg)

我看到了移动方法,但它不允许我不断更改文件名,并且可能使用for循环来循环它。但是,如果我要检测图像是否已经存在并转移到新名称? (示例:images1.jpg已经存在,但程序将替换它。)

任何想法如何解决这个问题?

4 个答案:

答案 0 :(得分:1)

我在这里看到一些重新发明轮子的答案。

.net通过GetTempFileNameGetRandomFileName

涵盖了此方案

使用获取随机文件名

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);
        });