c# - 压缩器/解压缩器 .Net Core 控制台程序中的“System.IO.FileNotFoundException”
问题描述
我正在 Visual Studio 2017 中制作压缩器/解压缩器控制台程序,我想通过将输入文件拖到控制台 (.txt) 来获取文件路径。
我得到了 Compress() 的 inputStream 的正确路径,但 outPutStream 失败并且找不到文件路径(FileMode.OpenOrCreate!?!),即使路径是硬编码的。
如果两个变量都被硬编码,程序将正确执行,但我不明白为什么 System.IO.FileNotFoundException 是通过从将文件拖到控制台获取输入文件并硬编码输出文件而引发的。
....
string outPutFileName = @"C:\bla\bla\bla\bla\gergrgr.gzip";
public static void Compress(string inPath)
{
using (FileStream inputStream = new FileStream(inPath, FileMode.OpenOrCreate, FileAccess.ReadWrite))
{
using (FileStream outputStream = new FileStream(outPutFileName, FileMode.OpenOrCreate, FileAccess.Write))
{
using (GZipStream gzip = new GZipStream(outputStream, CompressionMode.Compress))
{
inputStream.CopyTo(gzip);
}
}
}
}
static void Main(string[] args)
{
string outPutFileName = @"C:\bla\bla\bla\bla\gergrgr.gzip";
//dummy var, cant find a better way to add '@' to variable set by console.readline
string filePath = @"test";
// info info info....
Console.WriteLine("Drag in txt file");
// Takes the path from dragged in file
string idk = Console.ReadLine();
// instead of of a loop to escape "/", just replace text in filePath
filePath = filePath.Replace("test", idk);
Compress(filePath);
}
解决方案
我认为问题实际上是您的应用程序无权写入指定的输出位置。检查FileMode.OpenOrCreate的文档
如果文件访问权限为 FileAccess.Write,则需要写入权限。
以下对我有用:
using System;
using System.IO;
using System.IO.Compression;
namespace ConsoleApp1
{
internal class Program
{
private static readonly string outPutFileName = @"C:<my desktop directory>\gergrgr.gzip";
public static void Compress(string inPath)
{
using (var inputStream = new FileStream(inPath, FileMode.OpenOrCreate, FileAccess.ReadWrite))
{
using (var outputStream = new FileStream(outPutFileName, FileMode.OpenOrCreate, FileAccess.Write))
{
using (var gzip = new GZipStream(outputStream, CompressionMode.Compress))
{
inputStream.CopyTo(gzip);
}
}
}
}
private static void Main(string[] args)
{
// info info info....
Console.WriteLine("Drag in txt file");
// Takes the path from dragged in file
var filePath = Console.ReadLine();
if (!string.IsNullOrEmpty(filePath))
{
Compress(filePath.Trim('\\', '"'));
}
}
}
}
推荐阅读
- python - 我需要根据某些标准求和。我相信我需要 groupby 但在应用该方法时出现错误
- git - 有没有办法只看到 git diff 的一个变化
- amazon-web-services - AWS EBS Java 选项更新
- pytorch - Pytorch 并行推理
- android - 如何为类似于“大”应用程序的 Wear OS 3 应用程序创建启动画面?
- reactjs - 如何从响应中获取特定字段 - 在自动完成的 getOptionLabel 中设置
- flutter - Flutter web:滚动时文本方向发生变化
- javascript - 如何在 Java 中实现 CryptoJS.AES.encrypt 函数?
- vaadin - 从最右边移动网格保存和取消按钮,也许左对齐
- python-3.x - 使用 Open Slide 读取 WSI tiff 文件时,Google Colab Pro 内存不足(35GB)