如何从文件路径获取文件名,文件可以从不同的OSX或windows上传 我想要实现的目标和挑战如下:
\
以及Windows文件系统不允许的其他几个字符。 alg用\
替换_
。\\\\servername\\folder\\filenmae.txt
- 我无法使用fileinfo或路径,因为来自OSX的文件名可能包含非法字符,例如|
,>
,<
,因为如果文件名是在Mac OSX中是\\path\ex\file
,fileinfo或path给我“文件”作为文件名而不是整个名称。
- 现在,如果文件名在路径中有:\,我可以轻松地使用提取文件名
filename.Substring(filename.LastIndexOf(@"\") + 1)
- 但我的问题在于共享文件,因为Windows中的共享文件完整路径模式可以是OSX中的文件名。
我如何获得全名? 任何建议将不胜感激。
答案 0 :(得分:2)
我认为你想使用Path
的静态方法:
答案 1 :(得分:1)
正如其他人指出的那样;这不行。您无法创建适用于所有操作系统的文件名,甚至无法创建在单个操作系统中跨所有文件系统工作的文件名。我遇到了这个问题,试图将Windows NTFS文件复制到ISO 9660驱动器。
不要试图“清理”文件名;规则太不可靠,并且跨文件系统发生冲突。使用操作系统的API构建文件,例如System.IO.Path.GetTempFileName
或System.Windows.Controls.OpenFileDialog
。如果您尝试以编程方式构造文件名,请将您认为可以在所有客户端文件系统中使用的名称(如“MyFile”加上递增序列号或十六进制GUID)传递给API,并在文件系统异常时为它们做好准备工作
如果要跨文件系统复制文件,最好存储原始文件名以显示给用户,并将其用作“文件保存”对话框等的默认文件,但同样不要编写程序依靠他们。
答案 2 :(得分:0)
感谢所有回复,特别感谢@Dour High Arch。终于找到了解决方案。使用fileInfo类,也可以使用Path完成但尚未测试。
try
{
FileInfo fileInformation = new FileInfo(tempFileName);
String directory = fileInformation.DirectoryName;
if (tempFileName.StartsWith(directory))
{
filename = fileInformation.Name;
}
}
catch (Exception arugmentException)
{
if (!((arugmentException is ArgumentException) ||
(arugmentException is NotSupportedException))) throw;
}