.NET Framework是否有任何方法将路径(例如"C:\whatever.txt")转换为文件URI(例如"file:///C:/whatever.txt")?
该的System.Uri类有反向(从文件URI以绝对路径),但没有就我可以找到转换为文件URI.
此外,这不是 ASP.NET应用程序.
有没有内置的东西System.IO.Path只给我文件路径?
例如,如果我有 string
@ "C:\网络服务器\ PUBLIC\myCompany的\ CONFIGS\promo.xml"
是否有任何BCL方法可以给我
"C:\网络服务器\ PUBLIC\myCompany的\ CONFIGS \"?
这似乎是一个新手问题,但事实并非如此.一些常见的方法并不适用于所有情况:
这意味着使用path = os.path.abspath(os.path.dirname(sys.argv[0])),但如果您从另一个目录中的另一个Python脚本运行,这不起作用,这可能发生在现实生活中.
这意味着使用path = os.path.abspath(os.path.dirname(__file__)),但我发现这不起作用:
py2exe没有__file__属性,但有一个解决方法execute()没有__file__属性NameError: global name '__file__' is not defined回答不完整的相关问题:
我正在寻找一个通用的解决方案,一个适用于所有上述用例的解决方案.
这是测试用例的结果:
a.py: __file__= a.py
a.py: os.getcwd()= C:\zzz
b.py: sys.argv[0]= a.py
b.py: __file__= a.py
b.py: os.getcwd()= C:\zzz
Run Code Online (Sandbox Code Playgroud)
#! /usr/bin/env python
import os, sys
print "a.py: sys.argv[0]=", sys.argv[0]
print "a.py: __file__=", __file__
print …Run Code Online (Sandbox Code Playgroud) 我们正在使用一个代码存储库,它部署在Windows和Linux上 - 有时在不同的目录上.项目中的一个模块应该如何引用项目中的一个非Python资源(CSV文件等)?
如果我们做类似的事情:
thefile=open('test.csv')
Run Code Online (Sandbox Code Playgroud)
要么:
thefile=open('../somedirectory/test.csv')
Run Code Online (Sandbox Code Playgroud)
仅当脚本从一个特定目录或目录的子集运行时,它才会起作用.
我想做的是:
path=getBasePathOfProject()+'/somedirectory/test.csv'
thefile=open(path)
Run Code Online (Sandbox Code Playgroud)
这是正确的方法吗?可能吗?
string path = "C:/folder1/folder2/file.txt";
Run Code Online (Sandbox Code Playgroud)
我可以使用哪些对象或方法来获得结果folder2?
基本上,我知道我可以通过我的控制面板并修改路径变量.但是,我想知道是否有办法通过批量编程包含一个临时路径?这样它只在批处理文件执行期间使用.我不想让人们进入并修改他们的路径变量只是为了使用我的批处理文件.
我有Perl脚本,需要在执行期间确定脚本的完整路径和文件名.我发现,根据你调用脚本的方式$0不同而有时包含fullpath+filename,有时只是filename.因为工作目录也可以变化,所以我想不出可靠地获取fullpath+filename脚本的方法.
有人有解决方案吗?
我最近一直在将各种位置的MP3转移到存储库中.我一直使用ID3标签构建新的文件名(谢谢,TagLib-Sharp!),我注意到我得到了一个System.NotSupportedException:
"不支持给定路径的格式."
这是通过产生任一File.Copy()或Directory.CreateDirectory().
没过多久就意识到我的文件名需要消毒.所以我做了一件显而易见的事:
public static string SanitizePath_(string path, char replaceChar)
{
string dir = Path.GetDirectoryName(path);
foreach (char c in Path.GetInvalidPathChars())
dir = dir.Replace(c, replaceChar);
string name = Path.GetFileName(path);
foreach (char c in Path.GetInvalidFileNameChars())
name = name.Replace(c, replaceChar);
return dir + name;
}
Run Code Online (Sandbox Code Playgroud)
令我惊讶的是,我继续得到例外.原来,':'不在集合中Path.GetInvalidPathChars(),因为它在路径根中有效.我认为这是有道理的 - 但这必须是一个非常普遍的问题.有没有人有一些消毒路径的短代码?最彻底的我已经想到了这一点,但感觉它可能是矫枉过正.
// replaces invalid characters with replaceChar
public static string SanitizePath(string path, char replaceChar)
{
// construct a list of characters that can't show up in filenames. …Run Code Online (Sandbox Code Playgroud) 我正试图找到资源的路径,但我没有运气.
这有效(在IDE和JAR中)但这样我无法获得文件的路径,只有文件内容:
ClassLoader classLoader = getClass().getClassLoader();
PrintInputStream(classLoader.getResourceAsStream("config/netclient.p"));
Run Code Online (Sandbox Code Playgroud)
如果我这样做:
ClassLoader classLoader = getClass().getClassLoader();
File file = new File(classLoader.getResource("config/netclient.p").getFile());
Run Code Online (Sandbox Code Playgroud)
结果是:
java.io.FileNotFoundException: file:/path/to/jarfile/bot.jar!/config/netclient.p (No such file or directory)
有没有办法获得资源文件的路径?