使用SharpSVN读取文件时出现问题

时间:2010-12-29 01:52:08

标签: c# .net sharpsvn

我遇到了SharpSVN api的问题。当我尝试使用SvnClient.Write()或SvnClient.Export()时,会发生以下错误:

  

存储库格式错误的网址

我的代码如下

using(SvnClient client = new SvnClient())
        {
            MemoryStream ms = new MemoryStream();
            client.Authenticator.DefaultCredentials = new NetworkCredential("master","master");
            SvnTarget t1 = new SvnUriTarget(new Uri("http://ETAB-APP:81/repositorio/"));
            SvnTarget t2 = new SvnUriTarget(new Uri("http://ETAB-APP:81/repositorio/Registro e Controle Acadêmico/Administração/0000/Dossiê do Aluno - ADEMIR JOSPE SANGALLI - (2001193) - Curso (000)/DOC ADICIONAL(264839).pdf"));

            client.Write(t2, ms);
            client.Export(t2, "C:\\chups");


        }

这让我疯了,因为如果我尝试使用t1作为SvnTarget执行此方法,一切正常。但问题是我每次想要获取特定文件时都无法导出所有存储库。

我试图在URL名称之前加上“@”,即

  

http://@ETAB-APP:81/repositorio/Registro eControleAcadêmico/Administração/ 0000 /DossiêdoAluno - ADEMIR JOSPE SANGALLI - (2001193) - Curso(000)/ DOC ADICIONAL(264839).pdf

但没有任何反应。

我做错了什么?

PS:对不起,如果我有任何错误,我是巴西人,我的英语不是很好

2 个答案:

答案 0 :(得分:0)

我发现如果您只是将任意URL传递给Uri对象构造函数,它将创建一个SVN无法理解的无效Uri。这可能是由于外来字符或某些字符的转义,不需要由默认的Uri对象构造函数进行转义。

使用UriBuilder对象将Uri分解为其部分,然后将生成的Uri传递给SVN。

// Build Uri by explicitly specifying the constituent parts. 
UriBuilder uriBuilder = new UriBuilder("http", "ETAB-APP", 81, "/repositorio/Registro e Controle Acadêmico/Administração/0000/Dossiê do Aluno - ADEMIR JOSPE SANGALLI - (2001193) - Curso (000)/DOC ADICIONAL(264839).pdf");

using(SvnClient client = new SvnClient())
{
    MemoryStream ms = new MemoryStream();
    client.Authenticator.DefaultCredentials = new NetworkCredential("master","master");
    SvnTarget t2 = new SvnUriTarget(uriBuilder.Uri);
    client.Write(t2, ms);
    client.Export(t2, "C:\\chups");
}

答案 1 :(得分:0)

当我调用sharpsvn通过url获取svn信息时(包含'&',并且'/'结尾).sharp svn会抛出异常。

感谢sbrogers:

  

你需要逃脱网址吗? SVN Api可能会为你做,但它   可能值得尝试运行它   msdn.microsoft.com/en-us/library/... - sbrogers 2010年12月29日14:05

我使用此代码

SvnUriTarget repos = new SvnUriTarget(myUrlString.TrimEnd(new char[] { '/' }));

我的问题是已解决