如何用Repository.GetFileContents()获取P4API.NET中带@Label的文件?
解决P4.NET通过标签/版本号获取文件内容返回空的问题
问题原因
你之前直接把标签拼在DepotPath字符串里,但DepotPath类仅负责解析仓库路径本身,不会识别@后缀的版本标签,导致实际请求的是包含@标签的无效路径,自然返回空文件。而命令行p4 print会自动拆分路径和版本标识,所以能正常工作。
正确实现方式
方式1:通过GetFileContentsCmdOptions传入版本标签
将路径和标签分离,通过VersionSpec指定标签版本:
// 单独定义仓库路径(不带标签) var dloc = new DepotPath(filePath); // 创建标签版本规格 var labelSpec = new LabelSpec(fileLabel); // 在选项中传入版本规格 var opts = new GetFileContentsCmdOptions(GetFileContentsCmdFlags.Suppress, labelSpec); // 获取对应版本的文件内容 var file = p4repo.GetFileContents(opts, dloc);
方式2:使用FileSpec指定路径+版本
FileSpec是P4.NET中专门用于标识带版本文件的类,更推荐这种方式:
var depotPath = new DepotPath(filePath); var labelVersion = new LabelSpec(fileLabel); // 组合路径和版本标签为FileSpec var fileSpec = new FileSpec(depotPath, labelVersion); var opts = new GetFileContentsCmdOptions(GetFileContentsCmdFlags.Suppress, null); // 传入FileSpec获取文件内容 var file = p4repo.GetFileContents(opts, fileSpec);
扩展:获取指定版本号的文件
如果要通过#版本号获取文件,只需把LabelSpec换成RevisionSpec即可:
var revisionSpec = new RevisionSpec("12345"); // 替换为实际版本号 var fileSpec = new FileSpec(new DepotPath(filePath), revisionSpec); var file = p4repo.GetFileContents(opts, fileSpec);
内容的提问来源于stack exchange,提问作者ErikTheHack
相关产品推荐
相关产品推荐

