как загрузить Excel с повторяющимся именем - PullRequest
0 голосов
/ 13 февраля 2012

как загрузить файл Excel с повторяющимся файлом имени, но не перезаписывать предыдущий файл имени.Поэтому, если я загружу файл с тем же именем, он будет сохранен, как в Windows.

ex.во-первых, я загружаю файл Excel = "fileExcel".Затем я загружаю снова с тем же именем = "fileExcel".И это должно быть 2 файла в папке загрузки, сначала с именами «fileExcel» и «fileExcel (1)».

, поэтому, если я буду загружать снова и снова с тем же именем файла, он будет постоянно расти.(1), (2), (3), (4) и т. Д.

вот мой код:

    Dim fileName As String = Path.GetFileName(FileUpload1.PostedFile.FileName)
        Dim fileExtension As String = Path.GetExtension(FileUpload1.PostedFile.FileName)
        Dim fileLocation As String = Server.MapPath("~/Upload/" & fileName)
        FileUpload1.SaveAs(fileLocation)
 If fileExtension = ".xls" Then
            connectionString = "Provider=Microsoft.Jet.OLEDB.4.0;Data Source=" & fileLocation & ";Extended Properties=""Excel 8.0;HDR=Yes;IMEX=2"""
        ElseIf fileExtension = ".xlsx" Then
            connectionString = "Provider=Microsoft.ACE.OLEDB.12.0;Data Source=" & fileLocation & ";Extended Properties=""Excel 12.0;HDR=Yes;IMEX=2"""
        End If

спасибо до

Ответы [ 4 ]

2 голосов
/ 13 февраля 2012

Вы можете использовать File.Exists и переменную-счетчик:

Dim fileExtension = IO.Path.GetExtension(fileLocation)
Dim fileName = IO.Path.GetFileNameWithoutExtension(fileLocation)
Dim folder = IO.Path.GetDirectoryName(fileLocation)
Dim counter = 0
While IO.File.Exists(fileLocation)
    counter += 1
    Dim newFileName = String.Format("{0}({1}){2}", fileName, counter, fileExtension)
    fileLocation = IO.Path.Combine(folder, newFileName)
End While
1 голос
/ 13 февраля 2012

Не сохраняйте загруженные файлы под тем же именем, которое указано пользователем.Вы получите много пользователей, загружающих дублированные имена.Создайте новое имя для каждого загруженного файла и сохраните исходное имя в базе данных и сохраните указатель на сгенерированный файл в базе данных.Если файл запрашивается, выполните поиск в базе данных, чтобы найти исходный файл.

0 голосов
/ 14 февраля 2012

Ниже код должен это сделать.

public string CalculateNextFileName(string filename, string dir)
{
   var file = Path.GetFileNameWithoutExtension(filename);
   var files = new DirectoryInfo(@"M:\testdir").GetFiles(file + "*");
   return string.Format("{0} ({1})",file, files.Count ());
}

Использование:

var newFileName = "New Text Document.txt";

var nextFileName = CalculateNextFileName(newFileName, "C:\testdir");

Это очень наивная реализация, которая не учитывает отсутствующие файлыв последовательности (т. е. если файлы 2 и 3 отсутствовали, это выкачивает имя потенциально существующего файла).

0 голосов
/ 13 февраля 2012

используйте File.Exist или используйте linq для получения количества файлов и измените fileName, чтобы отразить новое имя.

...