Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/289.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/asp.net/36.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 上载文件后自动重命名文件_C#_Asp.net_Asp.net Core_Razor_File Upload - Fatal编程技术网

C# 上载文件后自动重命名文件

C# 上载文件后自动重命名文件,c#,asp.net,asp.net-core,razor,file-upload,C#,Asp.net,Asp.net Core,Razor,File Upload,我有一个音乐文件夹,如下图所示 和下面的代码来上传音乐 private IWebHostEnvironment _environment; public UploadFileModel(IWebHostEnvironment environment) { _environment = environment; } [BindProperty] public IFormFile Upload { get; set; } public async Task OnPostAsync() {

我有一个音乐文件夹,如下图所示

和下面的代码来上传音乐

private IWebHostEnvironment _environment;
public UploadFileModel(IWebHostEnvironment environment)
{
    _environment = environment;
}

[BindProperty]
public IFormFile Upload { get; set; }
public async Task OnPostAsync()
{
    var file = Path.Combine(_environment.ContentRootPath, "wwwroot/music", Upload.FileName);
    using (var fileStream = new FileStream(file, FileMode.Create))
    {
        await Upload.CopyToAsync(fileStream);
    }
}
在cshtml中

<form method="post" enctype="multipart/form-data">
    <input type="file" asp-for="Upload" accept=".mp3"/>
    <input type="submit" />
</form>


我想做的是自动将每个新的mp3文件重命名为
“Track{last_number+1}.mp3”
,以防链中缺少一个文件来代替它

我遵循@johnsteps并编写了以下代码。谢谢你,约翰

private IWebHostEnvironment _environment;
public UploadFileModel(IWebHostEnvironment environment)
{
    _environment = environment;
}

[BindProperty]
public IFormFile Upload { get; set; }
public async Task OnPostAsync()
{
    var musicFileName = "Track0.mp3";
    var musicDirectory = Path.Combine(_environment.ContentRootPath, "wwwroot/music");
    var musicDirectoryInfo = new DirectoryInfo(musicDirectory);
    var fileNumbers = musicDirectoryInfo.GetFiles()
        .Where(x => !String.IsNullOrEmpty(x.Name))
        .Select(x => GetFileNumber(x.Name))
        .OrderBy(x => x)
        .ToList();
    if (fileNumbers.Count > 0)
    {
        var fileNumber = fileNumbers.Last() + 1;
        var missingNumber = GetMissingNumber(fileNumbers);
        if (missingNumber.HasValue)
        {
            fileNumber = missingNumber.Value;
        }

        musicFileName = $"Track{fileNumber}.mp3";
    }

    var file = Path.Combine(_environment.ContentRootPath, "wwwroot/music", musicFileName);
    using (var fileStream = new FileStream(file, FileMode.Create))
    {
        await Upload.CopyToAsync(fileStream);
    }
}


private int GetFileNumber(String musicName)
{
    var lastFileNumber = musicName.Replace("Track", "").Replace(".mp3", "");
    var fileNumber = Convert.ToInt32(lastFileNumber);
    return fileNumber;
}

private static int? GetMissingNumber(List<int> numbers)
{
    var missingNumbers = Enumerable.Range(0, numbers.Last()).Except(numbers).ToList();
    if (missingNumbers.Count > 0)
        return missingNumbers.FirstOrDefault();
    return null;
}
私人IWebHostEnvironment\u环境;
公共上传文件模型(IWebHostEnvironment环境)
{
_环境=环境;
}
[BindProperty]
公共文件上载{get;set;}
公共异步任务OnPostAsync()
{
var musicFileName=“Track0.mp3”;
var musicDirectory=Path.Combine(_environment.ContentRootPath,“wwwroot/music”);
var musicDirectoryInfo=新目录信息(musicDirectoryInfo);
var fileNumbers=musicDirectoryInfo.GetFiles()
.Where(x=>!String.IsNullOrEmpty(x.Name))
.Select(x=>GetFileNumber(x.Name))
.OrderBy(x=>x)
.ToList();
如果(fileNumbers.Count>0)
{
var fileNumber=fileNumbers.Last()+1;
var missingNumber=GetMissingNumber(文件号);
if(missingNumber.HasValue)
{
fileNumber=missingNumber.Value;
}
musicFileName=$“曲目{fileNumber}.mp3”;
}
var file=Path.Combine(_environment.ContentRootPath,“wwwroot/music”,musicFileName);
使用(var fileStream=newfilestream(file,FileMode.Create))
{
等待上载。CopyToAsync(文件流);
}
}
private int GetFileNumber(字符串musicName)
{
var lastFileNumber=musicName.Replace(“曲目”),Replace(“mp3”);
var fileNumber=Convert.ToInt32(lastFileNumber);
返回文件号;
}
私有静态int?GetMissingNumber(列表编号)
{
var missingNumbers=Enumerable.Range(0,numbers.Last())。除了(numbers.ToList();
如果(missingNumbers.Count>0)
返回missingNumber.FirstOrDefault();
返回null;
}

OK。请注意,您没有包括一个问题。你被困在哪里了?我不知道怎么做,我什么也找不到。你想让它怎么工作?我的意思是,你打算如何确定最后的号码?通过存在的文件?通过一些数据库值?什么?通过检查文件夹中的文件。所以你需要将问题分为4部分:1)获取当前文件的列表。2) 解析当前文件名以获取其编号。3) 取最大值并将其值增加1。4) 生成新文件名。-1-3可能是一个文件名列表的单循环,后面是4。这正是我想要的,只是它不会替换丢失的曲目以防被删除。谢谢,先生,这正是我想要的。