繁体   English   中英

压缩器/解压缩器.Net Core控制台程序中的'System.IO.FileNotFoundException'

[英]'System.IO.FileNotFoundException' in compressor/decompressor .Net Core console program

我正在Visual Studio 2017中制作压缩器/解压缩器控制台程序,我想通过将输入文件拖动到控制台(.txt)来获取文件路径。

我正在为Compress()输入流找到正确的路径,但是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('\\', '"'));
            }
        }
    }
}

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM