损坏的符号链接文件抛出 FileNotFoundException 但传递 File.Exists
Broken symlink file throws FileNotFoundException but passes File.Exists
我有一个坏掉的符号 link:
lrwxr-xr-x 1 mugen staff 10 Nov 5 2018 README.md -> README.md?
检查 File.Exists(filePath)
returns true
,但调用 new FileStream(filePath, FileMode.Open)
抛出 System.IO.FileNotFoundException
.
避免尝试打开此文件的最佳策略是什么?
这种行为是有道理的 - 文件(符号 link)存在,但您无法读取它,因为它指向一个不存在的文件(损坏的符号 link ).
就我个人而言,我不太喜欢这些预检查。首先,它们本质上是活泼的——即使所有的检查都通过了,在那之后和你尝试使用文件之前文件系统上可能会发生一些事情(诚然,这在本地文件系统中不是什么问题,但我仍然认为这是一个坏习惯)。其次,它很昂贵 - 所有这些检查至少执行一些 I/O,而且通常是多余的(因为当您打开文件时,您将再次执行相同的 I/O)。
我只是尝试打开文件,并捕获异常:
FileStream fs = null;
try {
fs = new FileStream(filePath, FileMode.Open);
// Use fs
} catch (IOException e) {
// Handle the exception in some elegant way
} finally {
if (fs != null) {
fs.Close();
}
}
我有一个坏掉的符号 link:
lrwxr-xr-x 1 mugen staff 10 Nov 5 2018 README.md -> README.md?
检查 File.Exists(filePath)
returns true
,但调用 new FileStream(filePath, FileMode.Open)
抛出 System.IO.FileNotFoundException
.
避免尝试打开此文件的最佳策略是什么?
这种行为是有道理的 - 文件(符号 link)存在,但您无法读取它,因为它指向一个不存在的文件(损坏的符号 link ).
就我个人而言,我不太喜欢这些预检查。首先,它们本质上是活泼的——即使所有的检查都通过了,在那之后和你尝试使用文件之前文件系统上可能会发生一些事情(诚然,这在本地文件系统中不是什么问题,但我仍然认为这是一个坏习惯)。其次,它很昂贵 - 所有这些检查至少执行一些 I/O,而且通常是多余的(因为当您打开文件时,您将再次执行相同的 I/O)。
我只是尝试打开文件,并捕获异常:
FileStream fs = null;
try {
fs = new FileStream(filePath, FileMode.Open);
// Use fs
} catch (IOException e) {
// Handle the exception in some elegant way
} finally {
if (fs != null) {
fs.Close();
}
}