как исправить эту проблему hhmmss

#c# #asp.net-mvc #vb.net

#c# #asp.net-mvc #vb.net

Вопрос:

Я работал с оконными службами, где я генерирую текстовые файлы по целевому пути на основе некоторых сведений из базы данных, но у меня проблема, что служба работает слишком быстро!

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

код :

 using (transactionscope scope = new transactionscope ) 
{
  string nowtime = datetime.now.today.tostring(HHMMss) // it was working fine 
}
  

файл должен быть сгенерирован в соответствии с определенным соглашением об именовании файлов!! пример: hhmmss >>> нет миллисекунды
может ли кто-нибудь дать мне эксклюзивные идеи, как справиться с этой частью?

Комментарии:

1. просто в сторону, но вам, возможно, придется пересмотреть свое решение, если вы используете временную метку, чтобы избежать дубликатов. В конечном итоге вы столкнетесь с дубликатами, если ваша служба работает более 24 часов, или когда начнется переход на летнее время, или кто-то изменит время в системе. Почему бы вам просто не использовать GUID для уникальной идентификации файла?

Ответ №1:

Вы можете добавить миллисекунды к имени файла:

 string nowtime = datetime.Now.Today.ToString("HHmmssfff");
  

Смотрите Строки пользовательского формата даты и времени.

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

  1. MM это на месяцы, а не на минуты. Вы должны использовать нижний регистр mm.
  2. Параметр, который ToString принимает, является строкой.
  3. Ваш код не будет компилироваться, поскольку он неправильно обработан. Пожалуйста, используйте код, который может быть непосредственно использован в будущем.

Обновить:

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

Добавление:

 Thread.Wait(1000);
  

В нужном месте (конец цикла?) может сработать.

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

Комментарии:

1. нет, мы не можем .!! файл должен быть сгенерирован в соответствии с определенным соглашением об именовании файлов!! пример: hhmmss >>> нет миллисекунды

2. @pubby — Почему вы не опубликовали это в своем вопросе? Это не то, о чем мы можем догадаться. Пожалуйста, отредактируйте свой вопрос и добавьте эту очень важную деталь.

3. мои сомнения …!!! мы можем ретранслировать в потоке!! я имею в виду, что это обеспечит требуемый точный вывод!!

4. @pubby — не могли бы вы перефразировать этот последний комментарий? Я не уверен, что это значит.

5. @pubby — спасибо за перефразирование. Это имеет смысл. Почему именно это даст вам неверный вывод?

Ответ №2:

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

 DateTime.Today.ToString("HHmmssfff");
  

fff обозначает три разряда справа от десятичной дроби (тысячные доли секунды).