2017-01-10 11 views
1

Я пытаюсь сжать файлы с помощью GZIP, и мое приложение контролирует папку для новых файлов. Когда появляется новый файл, он должен быть сжат, а затем приложение должно продолжать делать это каждый раз, когда новый файл входит в папку.C# file compress with .gzip

private void Compress(string filePath) 
    { 

     using (FileStream inputStream = new FileStream(filePath,FileMode.OpenOrCreate,FileAccess.ReadWrite)) 
     { 
      using (FileStream outputStream = new FileStream(Path.Combine(Environment.GetFolderPath(Environment.SpecialFolder.ApplicationData), @"C:\\Users\\maki\\Desktop\\Input"), FileMode.OpenOrCreate, FileAccess.ReadWrite))//'System.UnauthorizedAccessException' 
      { 
       using (GZipStream gzip = new GZipStream(outputStream, CompressionMode.Compress)) 
       { 
        inputStream.CopyTo(gzip); 
       } 
      } 
     } 


    } 

, когда я запустить приложение, я получаю это исключение:

An unhandled exception of type 'System.UnauthorizedAccessException' occurred in mscorlib.dll 

Дополнительная информация:

Access to the path 'C:\Users\maki\Desktop\Input' is denied. 

Я искал много в Интернете, но не может найти правильный ответ.

Может ли кто-нибудь помочь мне с вопросом?

+1

Учитывая, что ошибка возникает, прежде чем что-либо делать с gzip, кажется маловероятным, что это * связано * с gzip. В принципе, это вопрос неспособности писать на определенный путь ... и я подозреваю, что это потому, что способ, которым вы строите путь, нарушен. –

+0

Я думаю, что я бы назначил этот оператор Path.Combine на строковое значение, а затем проверил это в отладчике, чтобы убедиться, что вы работаете с допустимым путем. –

ответ

0

Проблема может быть связана с тем, как создается поток файлов. В вашем коде вы комбинируете путь с методом Path.Combine с другим полным путем.

См. Приведенный ниже код. Другая проблема может быть связана с жестко закодированным путем. Является ли файл с именем Input или Input.gz? Также обратите внимание на возможность стекирования с помощью операторов для уменьшения вложенности.

private void Compress(string filePath) 
{ 
    using (FileStream inputStream = 
     new FileStream(filePath, FileMode.OpenOrCreate, FileAccess.ReadWrite)) 
    using (FileStream outputStream = 
     new FileStream(@"C:\\Users\\maki\\Desktop\\Input", 
      FileMode.OpenOrCreate, FileAccess.ReadWrite)) 
    using (GZipStream gzip = new GZipStream(outputStream, CompressionMode.Compress)) 
    { 
     inputStream.CopyTo(gzip); 
    } 
} 
+0

Это та же ошибка, также попробовалс как строковая переменная, но она всегда показывает ту же ошибку. – maki

+0

Введите имя файла? Или это Input.txt? –

+0

он работает сейчас, мне пришлось добавить после ввода \\ result.gz Спасибо за ваш ответ. – maki