由于无法提供完全可复制的示例而预先致歉,并不是每个人都将拥有网络驱动器来进行试验。
我具有用于执行数据缩减的处理功能,我们的数据存储在网络驱动器上。在今天早上进行调试时,我发现了一些奇怪的事情(对我而言),并且很好奇为什么Windows(Win7,64位)会以这种方式运行。我的Google-fu被击败了。
举例来说,假设我在 \\mynetworkshare
\\mynetworkshare\testdata\a
\\mynetworkshare\testdata\b
\\mynetworkshare\testdata\c
\\mynetworkshare\testdata\c\day1
\\mynetworkshare\testdata\c\day2
Run Code Online (Sandbox Code Playgroud)
随着somedatafile_n.abc
在每个的day
文件夹中。
c
在这种情况下,我的函数将解析用户指定的文件夹,并查找与过滤器匹配的所有数据文件:
searchpath = '\\mynetworkshare\testdata\c'
oldpath = cd(searchpath); % cd to data directory for simpler dir call
[~, filenames] = system('dir /S /B somedatafile_*.abc');
filelist = regexp(filenames, '(.:\\[\w\-\\. ]+\.\w+)', 'match'); % Split filenames
cd(oldpath);
Run Code Online (Sandbox Code Playgroud)
这将返回一个包含文件名的单元格数组:
Z:\day1\somedatafile_1.abc
Z:\day1\somedatafile_2.abc
Z:\day2\somedatafile_1.abc
Run Code Online (Sandbox Code Playgroud)
但是,这些不是与低级别I / O一起使用的有效路径:
Error using textscan
Invalid file identifier. Use fopen to generate a valid file identifier.
Run Code Online (Sandbox Code Playgroud)
应该注意的是,如果我安装网络驱动器并改用该路径,则此功能可以正常运行:
searchpath = 'H:\testdata\c'
oldpath = cd(searchpath); % cd to data directory for simpler dir call
[~, filenames] = system('dir /S /B somedatafile_*.abc');
filelist = regexp(filenames, '(.:\\[\w\-\\. ]+\.\w+)', 'match'); % Split filenames
cd(oldpath);
Run Code Online (Sandbox Code Playgroud)
哪个返回:
H:\testdata\c\day1\somedatafile_1.abc
H:\testdata\c\day1\somedatafile_2.abc
H:\testdata\c\day2\somedatafile_1.abc
Run Code Online (Sandbox Code Playgroud)
从https://www.mathworks.com/help/matlab/ref/system.html
DOS不支持UNC路径名。因此,如果当前文件夹使用UNC路径名,则使用依赖于当前文件夹的DOS命令运行系统将失败。要解决此限制,请在调用系统之前将文件夹更改为映射的驱动器。
system('net use Z: \\mynetworkshare\testdata\c')
cd('Z:\')
fileID = fopen('day1\somedatafile_1.abc');
C = textscan(fileID,'%s %s %f32 %d8 %u %f %f %s %f');
fclose(fileID);
Run Code Online (Sandbox Code Playgroud)