2015-04-08 2 views
0

Я использую Visual C# Express 10. Я пытаюсь создать, открыть и записать в .avi-файл из другого .avi-файла. Я использую проекты Aforge для проекта y. Следующий код был запрограммирован нажатием кнопки.Доступ к пути запрещен в C# Visual Express 2010

OpenFileDialog toy = new OpenFileDialog(); 

      toy.Filter = "AVI files (*.avi)|*.avi|All files (*.*)|*.*"; 
      toy.Title = "Open an AVI file"; 
      toy.ShowDialog(); 
      string wish = toy.FileName; 
      VideoFileReader reader = new VideoFileReader(); 
      VideoFileWriter writer = new VideoFileWriter(); 
      string fileName = @"C:\test.avi"; 
      FileStream fs = new FileStream(fileName, FileMode.OpenOrCreate); 

Я получаю сообщение об ошибке в строке выше

  // open video file 
      reader.Open(wish); 
      for (int i = 0; i < 100; i++) 
      { 
       Bitmap videoFrame = reader.ReadVideoFrame(); 
       int w = videoFrame.Width; 
       int h = videoFrame.Height; 
       writer.Open(@"C:\test.avi",w, h); 
       videoFrame.Save(i + ".bmp"); 
       // dispose the frame when it is no longer required 
       //videoFrame.Dispose(); 
      } 
      reader.Close(); 

Ошибка я получаю это "Доступ к пути 'C: \ test.avi' Отказано". Я попытался несколько решений в StackOverflow, которые включали изменение разрешений на диск C и использование экологических папок. Пожалуйста, посоветуйте мне об этом.

EDIT: Извините за задержку. Я также могу написать файл журнала. Я пытаюсь загрузить фото

EDIT 2: Это исключение. Я получил его из текстового поля и просто набрал его. Однако я заменил свое имя на xxxx.

System.UnauthorizedAccessException: Access to the path 'C:\test.avi' is denied. 
at System.IO._Error.WinIOError(Int32 errorCode, String maybeFullPath) 
at System.IO.FileStream.Init(String path, FileMode mode, FileAccess access, 
Int32 rights, Boolean useRights, FileShare share, Int32 buffersize, FileOptions) 
options, SECURITY_ATTRIBUTES secAttrs, String msgPath, Boolean bFromProxy, 
Boolean useLongPath, Boolean checkHost) 
at System.IO.FileStream..ctor(String path, FileMode mode, FileAccess access, 
FileShare share, Int32 bufferSize, FileOptions options, String msgPath, Boolean 
bFromProxy) 
at System.IO.FileStream..ctor(String path, FileMode mode) 
at VideoFramesTest.Form1.OpenAndSave() in 
C:\Users\XXXX\documents\visual studio 
2010\projects\VideoFramestest\VideoFramestest\Form1.cs:line42 
+0

Ну, похоже, что Aforge не имеет к этому никакого отношения - весь ваш вопрос может быть написан без каких-либо диалогов или чего-то подобного, только с созданием «FileStream». В конце концов, вы не дошли до того, что записывали что-либо в файл. Какая среда - это локальное клиентское приложение или веб-приложение или что? Можете ли вы писать в корневой каталог диска из командной строки или в проводнике? –

+0

Его форма окна. Это первый шаг большого приложения. Мне нужно включить несколько функций, но я застрял в начале. Что касается вашего другого вопроса, я могу написать в корневую папку через командную строку. Однако я не знаю, как писать с помощью проводника. – DetectiveFishLegs

+0

это может быть множество разных вещей, оберните ваш 'writer.open' в попытке поймать и опубликовать исключение. Файл может быть открыт, вам может потребоваться доступ администратора. мы не знаем – user1

ответ

0

Ok. Я решил свою проблему, выполнив это. Я изменил путь к файлу сохранения в c: users .... desktop По-видимому, мы не можем писать напрямую в C :. Он также работает, если новая папка создана в C: (например, C: \ test \ test.avi) Это решение. А также, я попробовал System.IO.File.Create (fileName). Работает также. Удачи всем.

0

Моя догадка учитывая ваш опыт работы с C# будет у вас есть test.avi открытый

лучше всего сделать, было бы обернуть для цикла в try/catch как так:

for (int i = 0; i < 100; i++) 
{ 
    try 
    { 

     Bitmap videoFrame = reader.ReadVideoFrame(); 
     int w = videoFrame.Width; 
     int h = videoFrame.Height; 
     writer.Open(@"C:\test.avi",w, h); 
     videoFrame.Save(i + ".bmp"); 
     // dispose the frame when it is no longer required 
     //videoFrame.Dispose(); 
    } 
    catch (Exception ex) 
    { 
    //show my exception 
    } 
} 

I также предложит вам также посмотреть Using Statements для обработки ресурсов

+0

Существует нет test.avi, чтобы он был открытым. Кроме того, ошибка возникает при объявлении streamwriter. – DetectiveFishLegs

+0

@detectiveFishLegs, Wait ... Вы пытаетесь открыть файл FileStream для файла, который не существует? Там есть ваша проблема ... Как вы ожидаете, что это произойдет? Что вы хотите вернуться? Убедитесь, что ваш файл существует до создания «FileStream», это просто здравый смысл. – user1

+0

'FileStream fs = new FileStream (fileName, FileMode.OpenOrCreate);' эта строка должна, вероятно, быть 'FileStream fs = new FileStream (wish, FileMode.OpenOrCreate) ; 'в вашем коде. Вытащите 'test.avi' – user1

 Смежные вопросы

  • Нет связанных вопросов^_^