UnauthorizedAccessException
От: pterodactyl  
Дата: 19.03.08 02:02
Оценка:
Привет всем
Запускаю небольшую программку на эмуляторе Pocket PC 2003, .net cf 2.0
Прога открывает "большой" файл и пишет из него кучу мелких. на каком-то моменте выкидывает исключение
System.UnauthorizedAccessException: UnauthorizedAccessException
в System.IO:__Error:WinIOError()
в System.IO:FileStream:.ctor()
в System.IO:FileStream:.ctor()
в PagesDB:MainForm:MakeInstall()

код:

        private void MakeInstall()
        {

            System.IO.FileStream fs = null;

            BinaryReader br = null;

            try
            {
                String sLocation = "\\Storage card\\Data\\";

                fs = new FileStream(sLocation + "Data.x", FileMode.Open, FileAccess.Read);
                br = new BinaryReader(fs);

                int l = System.BitConverter.ToInt32(br.ReadBytes(8), 0);

                MemoryStream ms = new MemoryStream();
                ZOutputStream outZStream = new ZOutputStream(ms);
                outZStream.Write(br.ReadBytes(l), 0, l);
                outZStream.Flush();
                outZStream.Close();


                ms.Seek(0, SeekOrigin.Begin);
                ArrayList al = new ArrayList();
                String str=String.Empty;

                using (StreamReader sr = new StreamReader(ms, System.Text.Encoding.GetEncoding(1251)))
                {
                    while ((str = sr.ReadLine()) != null)
                    {
                        al.Add(str);
                    }
                }

                ms.Close();
                
                if (!Directory.Exists(sLocation + "IDX\\"))
                {
                    Directory.CreateDirectory(sLocation + "IDX\\");
                }

                String name = String.Empty;
                System.IO.FileStream fs1 =null;
                
                for (int i = 0; i < al.Count; i++)
                {
                    name = sLocation+((String)al[i]).Split('|')[0];
                    l = System.Convert.ToInt32(((String)al[i]).Split('|')[1]);

                    if (File.Exists(sLocation + name))
                        File.Delete(sLocation + name);

                    //fs1 = File.OpenWrite(name);//тут ошибка
                    //fs1 = new FileStream(name, FileMode.CreateNew);//и так ошибка
                    fs1 = new FileStream(name, FileMode.Create);//так тоже ошибка
                    fs1.Write(br.ReadBytes(l), 0, l);
                    fs1.Flush();
                    fs1.Close();

                }
            }
            catch (Exception err)
            {
                throw new Exception("Error in module MakeInstall " + err.Message);
            }
            finally
            {
                if(br!=null)
                    br.Close();
            }

        }


Работаю под админским аккаунтом. На папку, которую эмулятор юзает в качестве карты памяти полный доступ выставлен админу, everyone, system и users. Прога пишет от одного до нескольких десятков файлов, выбрасывает исключение. Если запускать ее еще, не стирая ранее созданные файлы, то на след запуске записывает большее количество файлов, с каждым запуском все больше и больше, но все равно выбрасывает исключение. Посмотрел — эмулятор иногда делает файлы и папки с доступом readonly, но почему — даж не догадываюсь, а в программе только запуск процедуры MakeInstall и все.
Подскажите, кто-нибудь, из-за чего такая фигня?
 
Подождите ...
Wait...
Пока на собственное сообщение не было ответов, его можно удалить.