Существует ли подстановочная опция расширения для приложений .NET?

Статья Как синхронизировать локальную и Удаленный блог WordPress с помощью контроля версий дает советы о том, как автоматизировать синхронизацию между двумя экземплярами (разработка, производство) блога WordPress с использованием Mercurial. Означает, что для этого сценария Git и Mercurial очень похожи.

Здесь интерес представляет шаг 4 (Синхронизация баз данных).

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

blockquote>

Затем в ней подробно рассматриваются конфликты и часть сценария задания.

В Mercurial есть учебник по управлению версиями , если вы не знакомы с ним.

17
задан Luke 17 April 2009 в 19:21
поделиться

3 ответа

Ваш код похож точно, как Вы, как предполагается, делаете это.

2
ответ дан 30 November 2019 в 14:01
поделиться

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

var Dirs = Directory.GetDirectories(@"C:\Windows", "sys*", 
SearchOption.TopDirectoryOnly).ToList();
var Files = new List<String>();
Dirs.ForEach(dirName => Files.AddRange(Directory.GetFiles(dirName, "*.sys", SearchOption.AllDirectories)));

подстановочная опция на вызове GetDirectories позволит Вам захватывать все каталоги, содержавшиеся в папке Windows [непосредственно], которые соответствуют шаблону "sys* ".

можно тогда выполнить итерации по тем папкам, захватив все файлы, которые соответствуют шаблону" *.sys".

, который является видом вещи, которую Вы ищете? Для автоматического расширения args необходимо было бы извлечь подстановочные знаки некоторым значимым способом и применить их к той модели...

, Например:

RunMyApp "C:\Windows\Sys*\*.sys"

Вы вытащили бы строку C:\Windows - вероятно, с регулярным выражением, найти самый низкий каталог уровня, который не содержит подстановочный знак и применяет его к методу GetDirectories, присоединяя подстановочную строку как поисковый параметр.

Тогда, если Ваш конец строки (в этом случае *.sys) как шаблон поиска для Каталога. GetFiles.

, Если Вы хотели стать более сложными и сделать что-то как:

C:\Windows\*\Sys*\*.sys

Вы использовали бы SearchOptions для установки этого поведения:

Directory.GetDirectories(@"C:\Windows", "sys*", SearchOptions.AllDirectories)

Это захватило бы все каталоги, которые соответствовали sys* подстановочный знак в каталоге Windows и всех каталогах ниже его.

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

4
ответ дан 30 November 2019 в 14:01
поделиться

Вот мой грубый прием. Я бы хотел, чтобы он был рекурсивным. И, столкнувшись с недостатком подстановочных знаков Windows, я мог бы решить использовать регулярные выражения, а не позволять GetFiles () делать это за меня.

using System.IO;

public static string[] ExpandFilePaths(string[] args)
{
    var fileList = new List<string>();

    foreach (var arg in args)
    {
        var substitutedArg = System.Environment.ExpandEnvironmentVariables(arg);

        var dirPart = Path.GetDirectoryName(substitutedArg);
        if (dirPart.Length == 0)
            dirPart = ".";

        var filePart = Path.GetFileName(substitutedArg);

        foreach (var filepath in Directory.GetFiles(dirPart, filePart))
            fileList.Add(filepath);
    }

    return fileList.ToArray();
}
9
ответ дан 30 November 2019 в 14:01
поделиться