乐筑天下

搜索
欢迎各位开发者和用户入驻本平台 尊重版权,从我做起,拒绝盗版,拒绝倒卖 签到、发布资源、邀请好友注册,可以获得银币 请注意保管好自己的密码,避免账户资金被盗
查看: 90|回复: 7

相对路径问题

[复制链接]

16

主题

48

帖子

1

银币

初露锋芒

Rank: 3Rank: 3Rank: 3

铜币
112
发表于 2015-10-28 01:35:49 | 显示全部楼层 |阅读模式
嗨,
我在查找文件的代码中遇到了相对路径问题。第一次成功的时候。在同一个AutoCAD任务中,第二次,路径更改为C:\ Users \ XYZ \ AppData \ Roaming \ Autodesk \ AutoCAD 2012-English \ r 18.2 \ enu。请问这个问题有什么解决办法吗?谢谢

本帖以下内容被隐藏保护;需要你回复后,才能看到!

游客,如果您要查看本帖隐藏内容请回复
回复

使用道具 举报

116

主题

996

帖子

9

银币

顶梁支柱

Rank: 50Rank: 50

铜币
1466
发表于 2015-10-28 02:30:21 | 显示全部楼层

您如何找到该文件??
回复

使用道具 举报

10

主题

253

帖子

75

银币

后起之秀

Rank: 20Rank: 20Rank: 20Rank: 20

铜币
223
发表于 2015-10-28 02:52:19 | 显示全部楼层
什么findfile函数retrns?
代码是什么?您试图找到什么?也许“第二次”文档是新创建的文档?尝试保存它。
回复

使用道具 举报

16

主题

48

帖子

1

银币

初露锋芒

Rank: 3Rank: 3Rank: 3

铜币
112
发表于 2015-10-28 04:36:55 | 显示全部楼层
它是从一个特定的位置选择文件。例如,
string strFile = "。\ \ test \ \ ABC . txt ";
但它会转到AutoCAD漫游文件夹。
回复

使用道具 举报

10

主题

253

帖子

75

银币

后起之秀

Rank: 20Rank: 20Rank: 20Rank: 20

铜币
223
发表于 2015-10-28 05:15:58 | 显示全部楼层
试试这个:
[code](defun checkfile (file / _kpblc-conv-string-to-list)
  ;; (checkfile  ".\\test\\abc.txt")
  (defun _kpblc-conv-string-to-list (string separator / i)
    (cond
      ((= string "") nil)
      ((vl-string-search separator string)
       ((lambda (/ pos res)
          (while (setq pos (vl-string-search separator string))
            (setq res    (cons (substr string 1 pos) res)
                  string (substr string (+ (strlen separator) 1 pos))
                  ) ;_ end of setq
            ) ;_ end of while
          (reverse (cons string res))
          ) ;_ end of lambda
        )
       )
      ((wcmatch (strcase string) (strcat "*" (strcase separator) "*"))
       ((lambda (/ pos res _str prev)
          (setq pos  1
                prev 1
                _str (substr string pos)
                ) ;_ end of setq
          (while (/// //。
///包含定义相对路径开始的目录,。
>/// ///包含定义相对路径端点的路径,。
///从开始目录到结束路径的相对路径。
///。
///。
///。
公共静态字符串MakeRelativePath(string fromPath, string toPath)。
{。
if(string.IsNullOrEmpty(fromPath))抛出新的ArgumentNullException(nameof(fromPath));。
if(string.IsNullOrEmpty(toPath))抛出新的ArgumentNullException(nameof(toPath));。

var fromUri=new Uri(fromPath);。
var toUri=new Uri(toPath);。

if(fromUri.Scheme!=toUri.Scheme){返回路径; } // 路径不能相对,。

var relativeUri=fromUri.MakeRelativeUri(toUri);。
var relativePath=Uri.UnescapeDataString(relativeUri.ToString ());。

如果(toUri.Scheme.ToUpperInvariant () == "文件")。
{。
relativePath=relativePath.Replace(Path.AltDirectorySeparatorChar,Path.DirectorySeparatorChar);。
}。

返回相对路径;。
}。
回复

使用道具 举报

116

主题

996

帖子

9

银币

顶梁支柱

Rank: 50Rank: 50

铜币
1466
发表于 2015-10-28 06:03:58 | 显示全部楼层
听起来你打开了自动保存,那是在第一次保存之后
回复

使用道具 举报

116

主题

996

帖子

9

银币

顶梁支柱

Rank: 50Rank: 50

铜币
1466
发表于 2015-10-28 06:06:34 | 显示全部楼层
你最好解释一下相对路径”。\xxxxx\xxxx.xxx "是相对于什么:当前AutoCAD工作目录?当前图形的目录?的位置。使用这个“相对路径”的. NET dll?是否可以通过AutoCAD的支持路径来搜索该相对路径中的文件?
因为您在中发帖。NET论坛中,我假设“相对路径”意味着相对于。使用此相对路径的. NET dll。在这种情况下,您可以使用System。reflection . assembly . getexecutionassembly()。Location来确定运行DLL的位置,那么就可以相应地确定“相对路径”的完整路径。
回复

使用道具 举报

116

主题

996

帖子

9

银币

顶梁支柱

Rank: 50Rank: 50

铜币
1466
发表于 2015-10-28 06:11:21 | 显示全部楼层
今天早上早些时候,我又看了一下我的,注意到我记录了被抛出的异常,而不是处理它们。我决定继续前进,把它包装在一个类似于你的try/catch块中,如果有和你一样的错误,就返回toPath。对您的代码做一个简短的评论,您的try/catch块包含您的参数null exceptions。它们不会被你的抓块抓住吗?我想你不想要它,还是因为你在扔它们,所以它们不会被抓住?我从来没有尝试过,看看会发生什么。这是我之前为自己设计的,另外,如果你使用resharper,那么就把Exceptional作为一个插件。它可以迫使您要么记录所有异常,要么确保您捕捉到它们。  /// 。
///创建从目标文件/文件夹到源文件/文件夹再到另一个源文件/文件夹的相对路径,。
/// 。
/// 位于http://stack overflow . com/questions/275689/how-to-get-relative-path-from-absolute-path  。
/// 。
///包含定义相对路径起点的目录,。
/// 。
/// 包含定义相对路径端点的路径,。
/// 从起始目录到结束路径的相对路径,。
/// 或是,。
公共静态字符串makereativepath(string from path,string toPath)。
{。
if(字符串,IsNullOrEmpty(fromPath))抛出新的ArgumentNullException(name of(from path));。
if(字符串,IsNullOrEmpty(toPath))抛出新的ArgumentNullException(name of(toPath));。

var relativePath = toPath。

尝试一下。
{。
var from Uri = new Uri(from path);。
var toUri = new Uri(toPath);。

if (fromUri,方案!= toUri,方案)。
{。
返回到路径;。
} //路径不能成为相对路径,。

var relativeUri = fromUri,makereativeuri(toUri);。
relativePath = Uri,UnescapeDataString(relativeUri,ToString());。

如果(toUri,scheme . ToUpperInvariant()= = " FILE ")。
{。
relativePath = relativePath,替换(路径,AltDirectorySeparatorChar,路径。DirectorySeparatorChar);。
}。
}。
// ReSharper禁用exceptionnotdocumenedoptional 。
catch(ArgumentNullException异常)。
{。
日志,Logger.Error(异常,“无法确定相对路径,传递给URI的路径变量为空。”);//永远不应该发生,。
}。
catch (UriFormatException异常)。
{。
日志,Logger.Error(异常,“无法确定相对路径,检测到无效的统一资源标识符。”);。
}。
catch(InvalidOperationException异常)。
{。
日志,Logger.Error(异常,“无法确定相对路径,实例表示相对URI,此属性仅对绝对URI有效。”);。
}。
//ReSharper restore exceptionnotdocumenedoptional 。
返回relativePath。
}。
回复

使用道具 举报

发表回复

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

  • 微信公众平台

  • 扫描访问手机版

  • 点击图片下载手机App

QQ|关于我们|小黑屋|乐筑天下 繁体中文

GMT+8, 2025-2-4 21:49 , Processed in 0.467891 second(s), 68 queries .

© 2020-2025 乐筑天下

联系客服 关注微信 帮助中心 下载APP 返回顶部 返回列表