【问题标题】:'System.IO.FileNotFoundException' in compressor/decompressor .Net Core console program压缩器/解压缩器 .Net Core 控制台程序中的“System.IO.FileNotFoundException”
【发布时间】:2019-01-31 16:13:41
【问题描述】:

我正在 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);  

    } 

【问题讨论】:

    标签: c# .net compression console-application


    【解决方案1】:

    我认为问题实际上是您的应用程序没有写入指定输出位置的权限。检查 docs 的 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('\\', '"'));
                }
            }
        }
    }
    

    【讨论】:

    • 病毒和威胁防护 -> 受控文件夹访问 = OFFF。最后嘿嘿嘿嘿! :-)
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2019-05-07
    • 1970-01-01
    相关资源
    最近更新 更多