如何在Unix上将相对路径转换为C中的绝对路径?这有一个方便的系统功能吗?
在Windows上有一个GetFullPathName功能可以完成这项工作,但我在Unix上找不到类似的东西......
如何从asp.net中的物理路径获取相对虚拟路径?反向方法如下:
Server.MapPath("Virtual Path Here");
Run Code Online (Sandbox Code Playgroud)
但是上层方法的反转是什么?
比较.Net中的两个路径以确定它们是否指向同一文件或目录的最佳方法是什么?
如何验证这些是否相同:
c:\Some Dir\SOME FILE.XXX
C:\\\SOME DIR\some file.xxx
Run Code Online (Sandbox Code Playgroud)更好的是:有没有办法验证这些路径指向某个网络驱动器上的同一文件:
h:\Some File.xxx
\\Some Host\Some Share\Some File.xxx
Run Code Online (Sandbox Code Playgroud)更新:
Kent Boogaart正确回答了我的第一个问题; 但我仍然很想知道我的第二个问题是否有关于比较网络驱动器上的文件和目录路径的解决方案.
更新2(我的两个问题的综合答案):
问题1:本地和/或网络文件和目录
c:\Some Dir\SOME FILE.XXX
C:\\\SOME DIR\some file.xxx
Run Code Online (Sandbox Code Playgroud)
答案:用System.IO.Path.GetFullPath例如:
var path1 = Path.GetFullPath(@"c:\Some Dir\SOME FILE.XXX");
var path2 = Path.GetFullPath(@"C:\\\SOME DIR\subdir\..\some file.xxx");
// outputs true
Console.WriteLine("{0} == {1} ? {2}", path1, path2, string.Equals(path1, path2, StringComparison.OrdinalIgnoreCase));
Run Code Online (Sandbox Code Playgroud)
问题2:本地和/或网络文件和目录
答案:使用http://briancaos.wordpress.com/2009/03/05/get-local-path-from-unc-path/上发布的GetPath方法
在HOME/path_test /我有:
load_test.rb:
require 'yaml'
cnf = YAML::load(File.open('config.yml'))
puts cnf['Hello']
Run Code Online (Sandbox Code Playgroud)
config.yml:
Hello: world!!!
Run Code Online (Sandbox Code Playgroud)
当在HOME/path_test /我按预期得到:
-bash-3.2$ ruby load_test.rb
world!!!
Run Code Online (Sandbox Code Playgroud)
在HOME /(cd ..)我得到
-bash-3.2$ ruby path_test/load_test.rb
path_test/load_test.rb:3:in `initialize': No such file or directory - config.yml (Errno::ENOENT)
from path_test/load_test.rb:3:in `open'
from path_test/load_test.rb:3:in `<main>'
Run Code Online (Sandbox Code Playgroud)
这是正确的行为,但不是我所希望的:)
有没有办法相对于源文件加载.yml文件,而不是相对于当前工作的DIR?
解决方案(load_Test.rb):
require 'yaml'
fn = File.dirname(File.expand_path(__FILE__)) + '/config.yml'
cnf = YAML::load(File.open(fn))
puts cnf['Hello']
Run Code Online (Sandbox Code Playgroud) 我在同一个文件夹中有两个Bash脚本(由下载整个存储库的用户保存在某处):
script.sh 由用户运行helper.sh 是必需的并且由 script.sh这两个脚本应该位于同一目录中.我需要第一个脚本来调用第二个脚本,但有两个问题:
/usr/bin/script.sh,with ./script.sh或者它可能是../Downloads/repo/scr/script.sh)script.sh在调用之前,脚本将更改为其他目录helper.sh.我绝对可以通过将当前目录存储在一个变量中来实现这一目的,但是该代码似乎不必要地复杂化,因为我认为这是一个非常常见且简单的任务.
有可靠的helper.sh内部可靠呼叫方式script.sh吗?并且可以在任何支持Bash的操作系统中使用吗?
在我正在处理的Web服务中,我需要实现一个带有查询参数的URI /stats?store=A&store=B&item=C&item=D
为了分解它,我需要能够使用查询参数来指定来自多个/所有商店的数据以及来自这些商店的多个/所有商品的数据.到目前为止,我已经能够实现一个查询参数,以便提取项目数据,但我已经迷失了如何实现更多的查询,并且似乎无法找到我之前看到的资源有了这个实现.
到目前为止,我的方法是按照我的方法进行的
@GET
@Path("stats")
public String methodImCalling(@DefaultValue("All") @QueryParam(value = "item") final String item)
{
/**Run data using item as variable**/
return someStringOfData
}
Run Code Online (Sandbox Code Playgroud)
这适用于一个项目,如果我没有在URI中键入参数,将返回所有数据.但是,我不确定如何处理比这更多的参数.
更新:
我已经弄清楚如何通过简单地向方法添加第二个参数来使用2个不同的参数,如下所示:
public String methodImCalling(@DefaultValue("All") @QueryParam(value = "store") final String store,
@DefaultValue("All") @QueryParam(value = "item") final String item)
Run Code Online (Sandbox Code Playgroud)
问题仍然是如何实现相同参数的多个值.
我在访问我的应用程序中的文件时遇到问题.
我目前正在使用
//Directly from TileMap example from WWDC2010
NSString *tileDirectory = [[[NSBundle mainBundle] resourcePath]
stringByAppendingPathComponent:@"Tiles"];
Run Code Online (Sandbox Code Playgroud)
为我的访问我的瓷砖MKOverlay.这给了我这个目录
/ Users/xxxx/Library/Application Support/iPhone Simulator/4.2/Applications/9D62025C-C53B-472C-8309-xxxx/xxxx.app/Tiles
x仅出于隐私原因
我将我的磁贴放在Tiles我的应用程序的根目录中的一个文件夹中,该文件夹位于一个名为Xcode的组Tiles中,该Resources组直接在组中.
当我运行我的应用程序时,我得到一个简单的错误,说它无法在生成的目录中找到我的磁贴(上面的一个引用)如果我替换那段代码并使其成为:
NSString *tileDirectory = @"/Users/xxxx/Documents/xxxx/Tiles";
Run Code Online (Sandbox Code Playgroud)
然后我的应用程序正常.这显然是因为它在我Mac上的直接位置找到了我的瓷砖.这适用于测试,但我需要它才能在我的iPhone/iPad上运行.
由于以下原因可能会发生此问题:
.app文件中.无论哪种方式,我都不知道如何解决它.
我怎么解决这个问题?
[编辑]
我把那段代码更改为:
NSString *tileDirectory = [[NSBundle mainBundle] resourcePath];
Run Code Online (Sandbox Code Playgroud)
现在它在模拟器中工作,因为所有文件都在apps根文件夹中,我不要求它进入另一个名为"Tiles"的目录.
这在模拟器上运行没有错误,但是在我的iPhone上它会给出原始错误(只是一个不同的文件路径,但也以 /xxxx.app
如何确保我的应用程序文件中的目录,例如xxxx.app/Tiles-TileMap执行此操作.
随着Apple的Xcode命令行工具包的发布,我试图避免需要正确安装Xcode.为了做到这一点,我需要为依赖于xcode-select路径(当前指向/ Developer)的特定make文件设置xcode的路径
在使用CLI Toolkit for Xcode时,我在哪里指向xcode-select路径?
如果我安装Xcode,它只是/Applications/Xcode.app,但我不知道CLI工具包的放置位置.
谢谢.
更新:
从pkg安装程序看来它将它全部转储到/ usr/bin然后xcode-select或pkg内部的其他脚本为xcodebuilder等创建路径.任何人都可以确认吗?
我需要$PATH在我的应用程序中解析环境变量.所以我想知道哪些转义字符有效$PATH.我创建了一个名为test的测试目录/bin:d并在其中创建了一个测试脚本
funny.如果我用绝对路径调用它,它就会运行.我只是无法弄清楚如何逃脱:的$PATH我试图逃跑的结肠\和包成单',双"引号.但总是在我跑的which funny时候找不到它.我正在运行CentOS 6.
我有一个安装在其中的动态libray libtest.dylib /PATH/lib,以及一个使用安装的dylib的执行二进制文件myapp /PATH/bin.
我可以myapp按如下方式运行以找到dylib(在Mac OS X上使用DYLD_LIBRARY_PATH是否可以?并且,使用它的动态库搜索算法是什么?):
DYLD_LIBRARY_PATH="/PATH/lib" myapp
Run Code Online (Sandbox Code Playgroud)
我想我可以install_name_tool用来更新库和可执行文件,以便可以使用rpath找到库.我在这篇文章中使用了提示 - 如何在dylib中指定rpath?.
在lib中,我执行了这个命令来添加rpath.
install_name_tool -id "@rpath/libtest.dylib" libtest.dylib
install_name_tool -add_rpath "@executable_path/../lib/" libtest.dylib
Run Code Online (Sandbox Code Playgroud)
在bin中,我执行了install_name_tool -add_rpath "@executable_path/../lib/" myapp.
但是,当我myapp在bin目录中执行时,我有错误消息.
dyld: Library not loaded: libtest.dylib
Referenced from: /PATH/bin/./myapp
Reason: image not found
Trace/BPT trap: 5
Run Code Online (Sandbox Code Playgroud)
otool -l myapp 显示rpath在myapp中正确更新.
Load command 16
cmd LC_RPATH
cmdsize 40
path @executable_path/../lib/ (offset 12)
Run Code Online (Sandbox Code Playgroud)
libtest.dylib也是如此
Load command 13
cmd LC_RPATH
cmdsize 40
path …Run Code Online (Sandbox Code Playgroud)