sandeep.somvanshi83 Ответов: 6

увеличьте имя файла, если файл существует. использование c#


У меня есть одна задача, в которой я должен сохранять файлы в одной папке. Если имя файла уже существует под этим именем, то я хочу дать то же самое имя и добавить этот новый файл как 1,2,3....& так далее, например Backup(1), Backup(2), Backup(3)....& так далее. Я хочу этого программно.

Richard MacCutchan

И в чем именно заключается проблема, с которой вы сталкиваетесь при этом?

sandeep.somvanshi83

Моя проблема в том, что я хочу проверить, существует ли уже имя файла wethere. Если да, то я хочу сохранить новый файл с именем, которое имеет старый и добавляет какое-то число, например 1,2... Это похоже на управление версиями.

Tarun.K.S

Сколько вы уже пробовали?

sandeep.somvanshi83

Я постараюсь к вечеру.

6 Ответов

Рейтинг:
50

nit_singh

Попробуйте сделать так, что вам, возможно, придется сделать некоторые изменения, но эта логика будет работать

do
{
    fileCount++;
}
while (System.IO.File.Exists("FileName" + (fileCount > 0 ? "(" + fileCount.ToString() + ")" : "")));

            //Not create a file
System.IO.File.Create("FileName" + (fileCount > 0 ? "(" + (fileCount + 1).ToString() + ")" : ""));


mendy aaron

Просто убедитесь, что вы запускаете fileCount с -1 и ставите расширение после логики скобок.

Matthias Adloff

Мало того, что вы забыли упомянуть-не совсем очевидные - дополнения, на которые указал Менди, ваше решение перестанет работать после первой замены имени файла.
Если вы сохранили свой первый файл замены (2), то он будет искать
- fileCount 0 => существует
- fileCount 1 => не существует, поэтому напишите (2).

Правильное решение-оставить fileCount + 1 в стороне.

Рейтинг:
2

Reza Mansoori

Здравствуй, дорогой
существует метод, который определяет, есть ли файл в каталоге

System.IO.File.Exists("FilePath")

вы можете использовать его вот так
if (System.IO.File.Exists("FilePath"))
{
}
else
{
}


sandeep.somvanshi83

Я не могу увеличить имена файлов. Это все равно что давать версии.

Рейтинг:
1

ambarishtv

попробуйте этот код

private void button1_Click(object sender, EventArgs e)
       {
           string fileName = "C:\\Backup";
           int count = 0;
           Find :
           if (File.Exists(fileName))
           {
               fileName = fileName + "(" + count.ToString() + ").txt";
               count++;
               goto Find;
           }
           else
           {
               //Add your logic here
               File.Create(fileName);
           }
       }


sandeep.somvanshi83

Спасибо за хороший ответ.Но он создает файлы размером 0 КБ. Он не содержит никаких данных.

ambarishtv

Добавьте свою логику в эту область комментариев.

NikolaMihajlov

Спасибо. Очень мило и легко.

Рейтинг:
1

Vivek Krishnamurthy

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

string dirPath = @"C:\BackUp";
string fileName = "BackUp";
string[] files = Directory.GetFiles(dirPath);
int count = files.Count(file => { return file.Contains(fileName); });

string newFileName = (count == 0) ? "BackUp.bak" : String.Format("{0} ({1}).bak", fileName, count + 1);


Во всех остальных решениях дисковый ввод-вывод зависит от количества уже существующих файлов. В данном случае-только один.


Рейтинг:
1

Richard MacCutchan

Попробуй Каталог.EnumerateFiles()[^], который даст вам список файлов, которые вы можете проверить по своему собственному шаблону, чтобы решить, какое имя вы должны использовать для следующего в последовательности.


Рейтинг:
0

Drazen Pupovac

Сначала добавьте некоторый путь с именем файла:

строки путь_к_файлу = "c:\somefile.txt";

чем Чак если уже существует:

FileInfo fi = новый FileInfo(путь к файлу);
если (fi.существует)
{
//добавить новое имя и создать файл
}
еще
{
используя (модулю записи StreamWriter модулю записи StreamWriter == новые модулю записи StreamWriter(путь_к_файлу, правда))
{
модулю записи StreamWriter.WriteLine(@"какой-то текст");
модулю записи StreamWriter.Промывать();
модулю записи StreamWriter.Закрывать();
}
}


ambarishtv

пожалуйста, проверьте свой код перед публикацией