Привет всем
Запускаю небольшую программку на эмуляторе 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 и все.
Подскажите, кто-нибудь, из-за чего такая фигня?