尝试整理我的代码,因此我将处理用户选择要解压缩的文件的方法移至中央 fileops 类中。它现在抛出 UnathorizedAccessException,我无法弄清楚。
工作流程是用户通过 FileOps.UnzipFile() (由我的 ViewModel 调用)选择他们想要查看的压缩日志文件,将其解压缩,然后 FileOps.UnzipFile() 返回解压缩文件的位置。
但是,当 ViewModel 尝试:
var lines = File.ReadLines(unZippedFilePath); //read the unzipped file
我收到 UnauthorizedAccessException...
ViewModel 看起来像这样:
private void ProcessLogFile(object parameter)
{
string unZippedFilePath = WGFileOperations.UnzipFile();
var lines = File.ReadLines(unZippedFilePath); //read the unzipped file
foreach (var lineCheck in lines)
{
/* do a bunch of stuff */
}
//BORING STUFF OMMITED
}
WGFileOperations.UnzipFile() 方法如下所示:
public static string UnzipFile()
{
OpenFileDialog openFileDialog = new OpenFileDialog();
string _filePath = null;
if (openFileDialog.ShowDialog() == true)
{
_filePath = openFileDialog.FileName;
}
SaveFileDialog saveFileDialog = new SaveFileDialog();
saveFileDialog.FileName = Path.GetFileNameWithoutExtension(_filePath);
saveFileDialog.RestoreDirectory = true;
string extractPath = @"C:\Orica\UnpackedFiles\" + _filePath; //default extractpath
if (saveFileDialog.ShowDialog() == true)
{
extractPath = saveFileDialog.FileName;
}
if (File.Exists(extractPath) == false)
{
try
{
ZipFile.ExtractToDirectory(_filePath, extractPath);
MessageBox.Show("File Created Ok I Guess Because I Didn't Throw An Exception!");
}
catch (Exception ex)
{
MessageBox.Show("Error attempting to extract file! " + ex);
}
}
else
{
MessageBox.Show("That file already exists");
}
return extractPath;
}
那么有什么想法可能会发生这种情况以及我能做些什么吗?当我在 ViewModel 中有 WGFileOps.UnzipFile() 方法时,它工作正常...
尝试使用 FileStream 来完成此操作,如下所示:
using (FileStream zipToOpen = new FileStream(path, FileMode.Open))
{
using (ZipArchive archive = new ZipArchive(zipToOpen, ZipArchiveMode.Read))
{
foreach (ZipArchiveEntry entry in archive.Entries)
{
if (entry.FullName.EndsWith(".txt", StringComparison.InvariantCultureIgnoreCase))
{
using (var stream = entry.Open())
using (var reader = new StreamReader(stream))
{
string line;
while((line = reader.ReadLine()) != null)
{
// read your lines here
}
}
}
}
}
}
克劳斯解决了这个问题: “ExtractToDirectory 将创建一个具有给定名称的目录并将解压缩的文件放入其中。因此您的 unZippedFilePath 是目录路径,而不是文件路径”。
我向我的方法返回一个目录路径,该方法正在寻找文件路径。结果我得到了访问异常。为了解决这个问题,我插入了一些代码来获取实际的文件路径,然后将其传递给我的方法。现在一切都运行良好,我的生活感觉更好了,因为我知道我的代码更干净了;-)