使用SharpSvn获取文件的创建日期

时间:2012-03-20 17:08:01

标签: c# .net svn sharpsvn

我正在使用SharpSvn并且必须分析存储库中的文件夹 我需要知道什么时候在那里创建了一个文件,
不是最后修改日期,而是在创建时,

你知道怎么做吗?

我从以下开始:

    Collection<SvnLogEventArgs> logitems;
    var c = client.GetLog(new Uri(server_path), out logitems);


    foreach (var i in logitems)
    {
        var properties = i.CustomProperties;
        foreach (var p in properties)
        {
             Console.WriteLine(p.ToString());
             Console.WriteLine(p.Key);
             Console.WriteLine(p.StringValue);
        }
    }

但我没有看到任何创作日期 有人知道从哪里得到它吗?

2 个答案:

答案 0 :(得分:0)

看起来我做不到。这是我如何解决这个问题: 如果它是SvnChangeAction.Add,我会得到时间。 这是代码(SvnFile是我自己的类,不是来自SharpSvn):

public static List<SvnFile> GetSvnFiles(this SvnClient client, string uri_path)
{
    // get logitems
    Collection<SvnLogEventArgs> logitems;
    client.GetLog(new Uri(uri_path), out logitems);

    var result = new List<SvnFile>();

    // get craation date for each
    foreach (var logitem in logitems.OrderBy(logitem => logitem.Time))
    {
        foreach (var changed_path in logitem.ChangedPaths)
        {
            string filename = Path.GetFileName(changed_path.Path);
            if (changed_path.Action == SvnChangeAction.Add)
            {
                result.Add(new SvnFile() { Name = filename, Created = logitem.Time });
            }
        }
    }

    return result;
}

答案 1 :(得分:0)

与前一个代码略有不同的代码:

    private static DateTime findCreationDate(SvnClient client, SvnListEventArgs item)
    {
        Collection<SvnLogEventArgs> logList = new Collection<SvnLogEventArgs>();
        if (item.BasePath != "/" + item.Name)
        {
            client.GetLog(new Uri(item.RepositoryRoot + item.BasePath + "/" + item.Name), out logList);
            foreach (var logItem in logList)
            {
                foreach (var changed_path in logItem.ChangedPaths)
                {

                    string filename = Path.GetFileName(changed_path.Path);
                    if (filename == item.Name && changed_path.Action == SvnChangeAction.Add)
                    {
                        return logItem.Time;                            
                    }
                }
            }
        }
        return new DateTime();
    }