Как я могу отформатировать имя файла, как оно включает в себя дату и время, месяц и год - PullRequest
0 голосов
/ 12 октября 2011

В настоящее время я использую для хранения zip-файлов с именем файла, как это ...

backup-20111010092345.Zip

, но я хочу изменить имя файла на это.. backup-2011-10-10_09:23:45.Zip

у меня есть этот код ...

string zipName = Path.Combine(filepath, string.Format("backup-{0}.zip", DateTime.Now.ToString("yyyyMMddhhmmss")));
string backupFilePath = Path.Combine(filepath, backupName);
  using (ZipFile zip = new ZipFile())
  {
    zip.AddFile(backupFilePath, "");
    zip.Save(zipName);

  }



string backupName = "backup.sql";
 string filepath = @"C:\Folder\Back\";

Может ли кто-нибудь помочь с этим ... большое спасибо заранее ...

Модифицированный код:

  string zipName = Path.Combine(filepath, string.Format("backup-{0:yyyy-MM-dd_HH:mm:ss}.zip", DateTime.Now));
  string backupFilePath = Path.Combine(filepath, backupName);
  using (ZipFile zip = new ZipFile())
  {
    zip.AddFile(backupFilePath, "");
    zip.Save(zipName);

  }

Ошибка: исключение не поддерживается Не обработано

это трассировка стека.

     at System.Security.Util.StringExpressionSet.CanonicalizePath(String path, Boolean needFullPath)
   at System.Security.Util.StringExpressionSet.CreateListFromExpressions(String[] str, Boolean needFullPath)
   at System.Security.Permissions.FileIOPermission.AddPathList(FileIOPermissionAccess access, AccessControlActions control, String[] pathListOrig, Boolean checkForDuplicates, Boolean needFullPath, Boolean copyPathList)
   at System.Security.Permissions.FileIOPermission..ctor(FileIOPermissionAccess access, String[] pathList, Boolean checkForDuplicates, Boolean needFullPath)
   at System.IO.File.Move(String sourceFileName, String destFileName)
   at Ionic.Zip.ZipFile.Save()
   at Ionic.Zip.ZipFile.Save(String fileName)

ошибка: указанный путьформат не поддерживается.

Ответы [ 3 ]

6 голосов
/ 12 октября 2011

Звучит так, как будто вы почти получили его (с точки зрения создания указанного вами имени) - вам просто нужно изменить строку формата

string zipName = Path.Combine(filepath,
    string.Format("backup-{0}.zip",
                  DateTime.Now.ToString("yyyy-MM-dd_HH:mm:ss"));

Вы могли бы указать, чтоas:

string zipName = Path.Combine(filepath,
    string.Format("backup-{0:yyyy-MM-dd_HH:mm:ss}.zip",
                  DateTime.Now));

Вам решать, что вы найдете более читабельным.

Обратите внимание, что для текущей культуры будет использоваться разделитель времени.Если вы всегда хотите, чтобы это было "двоеточие", то вы должны указать это.С другой стороны, является ли двоеточие допустимым символом в именах файлов Windows?Попробуйте снова использовать тире или что-то подобное.Например:

string zipName = Path.Combine(filepath,
    string.Format("backup-{0:yyyy-MM-dd_HH-mm-ss}.zip",
                  DateTime.Now));
2 голосов
/ 12 октября 2011

Вам нужно будет использовать что-то кроме :, поскольку оно зарезервировано.Я предлагаю что-то вроде:

 DateTime.Now.ToString("yyyy-MM-dd_hh-mm-ss");
1 голос
/ 12 октября 2011

Помимо встроенных форматов, вы можете получить отдельные компоненты объекта DateTime, используя его свойства, такие как myDate.Year и т. Д. Они подробно описаны в MSDN здесь:

http://msdn.microsoft.com/en-us/library/991wfdee(v=VS.90).aspx

Так что, если вам нужно действительно странное форматирование, вы можете собрать составную строку из каждой составной части в любой шаблон, какой захотите.

...