Home  |  Delphi .net Home  |  System.IO.FileStream  |  Lock Method
Lock  
Method  
Lock a section of the current stream to prevent others writing to it
FileStream Class
System.IO NameSpace
NotCF1.  Procedure Lock ( StartIndex:Int64StartIndex : Int64; Count : Int64; ) ;
CF : Methods with this mark are Compact Framework Compatible
Description
Count bytes from StartIndex are locked. This prevents other, concurrent processes writing to them.
Notes
This is somewhat beyond Delphi Basics, so the example merely illustrates the syntax.
Microsoft MSDN Links
System.IO
System.IO.FileStream
 
 
Illustrating the syntax
// Full Unit code.
// -------------------------------------------------------------
// Create a new WinForm application, double click the form to
// create an OnLoad event, and then replace the WinForm unit
// with this text.
 
unit WinForm;
 
interface
 
uses
  System.Drawing, System.Collections, System.ComponentModel,
System.Windows.Forms, System.Data;
 
type
  TWinForm = class(System.Windows.Forms.Form)
  \{REGION 'Designer Managed Code'\} // Note that REGION and ENREGION should be prefixed by a dollar sign
  strict private
    ///
    /// Required designer variable.
    ///

    Components: System.ComponentModel.Container;
    ///
    /// Required method for Designer support - do not modify
    /// the contents of this method with the code editor.
    ///

    procedure InitializeComponent;
    procedure TWinForm_Load(sender: System.Object; e: System.EventArgs);
  {ENDREGION}
  strict protected
    ///
    /// Clean up any resources being used.
    ///

    procedure Dispose(Disposing: Boolean); override;
  private
    { Private Declarations }
  public
    constructor Create;
  end;
 
  [assembly: RuntimeRequiredAttribute(TypeOf(TWinForm))]
 
implementation
 
\{REGION 'Windows Form Designer generated code'\}
///
/// Required method for Designer support -- do not modify
/// the contents of this method with the code editor.
///

 
 
procedure TWinForm.InitializeComponent;
begin
  //
  // TWinForm
  //
  Self.AutoScaleBaseSize := System.Drawing.Size.Create(5, 13);
  Self.ClientSize := System.Drawing.Size.Create(292, 266);
  Self.Name := 'TWinForm';
  Self.Text := 'WinForm';
  Include(Self.Load, Self.TWinForm_Load);
end;
{ENDREGION}
 
procedure TWinForm.Dispose(Disposing: Boolean);
begin
  if Disposing then
  begin
    if Components <> nil then
      Components.Dispose();
  end;
  inherited Dispose(Disposing);
end;
 
constructor TWinForm.Create;
begin
  inherited Create;
  //
  // Required for Windows Form Designer support
  //
  InitializeComponent;
  //
  // TODO: Add any constructor code after InitializeComponent call
  //
end;
 
procedure TWinForm.TWinForm_Load(sender: System.Object; e: System.EventArgs);
program Project1;
{$APPTYPE CONSOLE}

uses
  System.IO;

var
  Stream : System.IO.FileStream;
  i      : Integer;

begin
  // Open the file for writing
  Stream := System.IO.FileStream.Create('C:\DelphiBasics.txt',
                                        FileMode.Create);

  // Write to the file
  Stream.WriteByte(65);  // Chr(65) = 'A'
  Stream.WriteByte(66);  // Chr(66) = 'B'
  Stream.WriteByte(67);  // Chr(67) = 'C'
  Stream.WriteByte(68);  // Chr(68) = 'D'
  Stream.WriteByte(69);  // Chr(69) = 'E'

  // Lock the last 3 bytes for update
  Stream.Lock(2, 3);

  // Now any concurrent process will be unable to write to
  // these last 3 bytes of the file.

  // ... Run a concurrent process at this point

  // Unlock the file
  Stream.Unlock(2, 3);

  // Close the stream
  Stream.Close;

  Console.Readline;
end.
 
end.
Hide full unit code
  
 
 
Delphi Programming © Neil Moffatt All rights reserved.  |  Contact the author