2017-08-01 53 views
4

我想检查一个字符串表示文件的完整路径,这样一个正确的文件路径:Matlab的:检查是否字符串有语法

p = 'C:\my\custom\path.txt' 

该文件不存在,所以像isdir命令和exist返回false给我,但还是字符串的格式代表了我的操作系统有效的路径,而下面的一个没有,因为它的文件名无效字符:

p = 'C:\my\custom\:path.txt' 

所以我喜欢知道如何检查一个字符串是否代表av alid文件路径而不需要该文件实际存在。

回答

3

您可能想使用regexp函数与regular expression to match Windows paths

if isempty(regexp(p, '^(?:[a-zA-Z]\:|\\\\[\w\.]+\\[\w.$]+)\\(?:[\w]+\\)*\w([\w.])+$', 'once')) 
    // This is not a path 
end 
+0

好的谢谢。它不是跨平台的,但如果需要的话,它可以很容易地适应其他系统。 – Jepessen

+0

是的,我看到你提供的路径是Windows的路径,所以我认为你只会对Windows解决方案感兴趣。相同的链接对于UNIX/Linux路径有一个答案,这些路径比较松散。任何不是/或NUL的文件都可以显示为文件名/目录名,尽管文件系统在它接受的路径中也有一些说法。 –

+0

是的,我必须为特定的操作系统编写路径才能显示某些内容,但在我的文章中,我讨论了操作系统而不是Windows。无论如何是一个很好的解决方案,它会解决我的问题。 – Jepessen

1

您也可以让Matlab的尝试为您提供:

if ~isdir(p) 
    [status, msg] = mkdir(p); 
    if status 
     isdir(p) 
     rmdir(p) 
    else 
     error(msg) 
    end 
end 

首先,你检查,如果该文件夹存在,如果你不尝试创建它。如果你成功,那么你删除它,如果没有,你会抛出一个错误。

这不建议检查许多字符串,但有跨平台的优势。

+2

我有两个问题用这种方法。首先是我的路径也包含一个文件名,'mkdir'需要一个文件夹。第二件事是路径可以与不存在的位置相关,比如我没有在PC中使用的G硬盘,在我没有写权限的位置。 – Jepessen

+0

我觉得制作一个目录只是为了测试路径是否正确是一种错误的方法。没有必要摆弄新的文件夹等。 –

+1

@AnderBiguri我同意这不是一个干净的方法,并且OP的评论是正确的,但是这具有跨平台的优势(甚至不知道平台是什么)。 – EBH