[Mono-dev] Problems with FileStream.Lock();

Terry-Watts.com Terry at Terry-Watts.com
Tue Jan 8 21:44:10 UTC 2013


I have check the Android API docs and file locking has been available on 
channels since API Level 1.

Regards
Terry


On 9/01/2013 3:54 AM, Rafael Teixeira wrote:
> I'm not sure, but I think locking is unavailable on Android, and so 
> Mono can't build up on the abstraction...
>
> Rafael "Monoman" Teixeira
> ---------------------------------------
> "The most exciting phrase to hear in science, the one that heralds new 
> discoveries, is not 'Eureka!' (I found it!) but 'That's funny ...'"
> Isaac Asimov
> US science fiction novelist & scholar (1920 - 1992)
>
>
> On Mon, Jan 7, 2013 at 7:50 PM, Terry-Watts.com <Terry at terry-watts.com 
> <mailto:Terry at terry-watts.com>> wrote:
>
>     I have a class that work fine in C# under Windows but not under
>     Monodroid.
>
>     A simplified version of the class is:
>
>     |public  class  LockedStream  :  FileStream
>     {
>          ulong  LockCount  =  0;
>          bool  _IsNewFile;
>
>            LockedStream(  bool  IsNewFile,  string  path,  FileMode  mode,  FileAccess  access,  FileShare  share)
>                        :  base(  MakePath(  path),  mode,  access,  share)
>               {
>                 _IsNewFile  =  IsNewFile;
>               }
>
>         public  LockedStream(  string  path,  FileMode  mode,  FileAccess  access,  FileShare  share)
>                        :  this(  !File.Exists(  path),  path,  mode,  access,  share)
>               {
>               }
>
>         public  static  internal  LockedStream  Open(  string  FilePathName  )
>              {
>                 return  (  new  LockedStream(  FilePathName,  FileMode.OpenOrCreate,  FileAccess.ReadWrite,  FileShare.ReadWrite  )  );
>              }
>
>          public  void  Lock()
>              {
>                  if(  LockCount++  ==  0  )
>                  {
>                       int  SleepCount  =  1;
>
>                          while(  true  )
>                          {
>                              try
>                              {
>                                  base.Lock(  0,  Int64.MaxValue  );
>                                  break;
>                               }
>                               catch(  Exception  E)
>                               {
>                                    Thread.Sleep(  SleepCount++  );
>                               }
>                           }
>                   }
>              }
>
>         public  void  UnLock()
>                {
>                    if(  LockCount  >  0  )
>                    {
>                        if(  --LockCount  ==  0  )
>                        {
>                            try
>                            {
>                                base.Unlock(  0,  Int64.MaxValue  );
>                            }
>                            catch(  Exception  )
>                            {
>                            }
>                         }
>                     }
>                 }
>
>     }|
>
>     Now when I do:
>
>     |LockedStream  Stream  =  LockedStream.Open(  "Some Path/file name"  );
>           Stream.Lock();|
>
>     I get the file created when I call the Open(); but when I call
>     Stream.Lock(); I hangs in the lock routine forever because
>     base.Lock( 0, Int64.MaxValue ); throws a lock violation exception
>     even though the file isn't locked.
>
>     Does anybody know why this is happening on Android?
>
>     Thanks in advance.
>
>     Terry
>
>
>     _______________________________________________
>     Mono-devel-list mailing list
>     Mono-devel-list at lists.ximian.com
>     <mailto:Mono-devel-list at lists.ximian.com>
>     http://lists.ximian.com/mailman/listinfo/mono-devel-list
>
>

-------------- next part --------------
An HTML attachment was scrubbed...
URL: <http://lists.ximian.com/pipermail/mono-devel-list/attachments/20130109/539a5fb1/attachment-0001.html>


More information about the Mono-devel-list mailing list