代码之家  ›  专栏  ›  技术社区  ›  meister

压缩程序/解压缩程序.Net核心控制台程序中的“System.IO.FileNotFoundException”

  •  0
  • meister  · 技术社区  · 7 年前

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

    我正在为inputStream for 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);  
    
        } 
    
    1 回复  |  直到 7 年前
        1
  •  0
  •   Christo    7 年前

    我认为问题实际上是你的应用程序没有写入指定输出位置的权限。检查 docs 对于FileMode.OpenOrCreate

    以下内容适合我:

    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('\\', '"'));
                }
            }
        }
    }
    
    推荐文章