[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