«System.IO.FileNotFoundException» в программе сжатия / распаковки .Net Core - PullRequest
0 голосов
/ 31 января 2019

Я создаю консольную программу для компрессора / декомпрессора в 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 Ответ

0 голосов
/ 31 января 2019

Я думаю, что проблема в том, что у вашего приложения нет прав на запись в указанное место вывода.Проверьте документы для 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('\\', '"'));
            }
        }
    }
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...