FileStream.Lock メソッド
アセンブリ: mscorlib (mscorlib.dll 内)



その他の一般的な I/O タスクまたは関連する I/O タスクの例を次の表に示します。
File.AppendText FileInfo.AppendText | |
File.Move FileInfo.MoveTo | |
File.Copy FileInfo.CopyTo | |
FileInfo.Length | |
File.GetAttributes | |
File.SetAttributes | |
CreateSubdirectory | |
GetFileSystemInfos |

次に示すのは、ファイルの一部をロックするコード例です。他のプロセスがアクセスを試みると、たとえそのファイルへの読み取り/書き込みアクセス権があっても、そのアクセスは拒否されます。プログラムを複数のコマンド ウィンドウで同時に実行し、それぞれに異なるコンソール入力オプションを使用して結果を確認してください。
Imports Microsoft.VisualBasic Imports System Imports System.IO Imports System.Text Public Class FStreamLock Shared Sub Main() Dim uniEncoding As New UnicodeEncoding() Dim lastRecordText As String = _ "The last processed record number was: " Dim textLength As Integer = _ uniEncoding.GetByteCount(lastRecordText) Dim recordNumber As Integer = 13 Dim byteCount As Integer = _ uniEncoding.GetByteCount(recordNumber.ToString()) Dim tempString As String Dim aFileStream As New FileStream( _ "Test#@@#.dat", FileMode.OpenOrCreate, _ FileAccess.ReadWrite, FileShare.ReadWrite) Try ' Write the original file data. If aFileStream.Length = 0 Then tempString = _ lastRecordText + recordNumber.ToString() aFileStream.Write(uniEncoding.GetBytes(tempString), _ 0, uniEncoding.GetByteCount(tempString)) End If ' Allow the user to choose the operation. Dim consoleInput As Char = "R"C Dim readText(CInt(aFileStream.Length)) As Byte While consoleInput <> "X"C Console.Write(vbcrLf & _ "Enter 'R' to read, 'W' to write, 'L' to " & _ "lock, 'U' to unlock, anything else to exit: ") tempString = Console.ReadLine() If tempString.Length = 0 Then Exit While End If consoleInput = Char.ToUpper(tempString.Chars(0)) Select consoleInput ' Read data from the file and ' write it to the console. Case "R"C Try aFileStream.Seek(0, SeekOrigin.Begin) aFileStream.Read( _ readText, 0, CInt(aFileStream.Length)) tempString = New String( _ uniEncoding.GetChars( _ readText, 0, readText.Length)) Console.WriteLine(tempString) recordNumber = Integer.Parse( _ tempString.Substring( _ tempString.IndexOf(":"C) + 2)) ' Catch the IOException generated if the ' specified part of the file is locked. Catch ex As IOException Console.WriteLine("{0}: The read " & _ "operation could not be performed " & _ "because the specified part of the" & _ " file is locked.", _ ex.GetType().Name) End Try Exit Select ' Update the file. Case "W"C Try aFileStream.Seek(textLength, _ SeekOrigin.Begin) aFileStream.Read( _ readText, textLength - 1, byteCount) tempString = New String( _ uniEncoding.GetChars( _ readText, textLength - 1, byteCount)) recordNumber = _ Integer.Parse(tempString) + 1 aFileStream.Seek( _ textLength, SeekOrigin.Begin) aFileStream.Write(uniEncoding.GetBytes( _ recordNumber.ToString()), 0, byteCount) aFileStream.Flush() Console.WriteLine( _ "Record has been updated.") ' Catch the IOException generated if the ' specified part of the file is locked. Catch ex As IOException Console.WriteLine( _ "{0}: The write operation could " & _ "not be performed because the " & _ "specified part of the file is " & _ "locked.", ex.GetType().Name) End Try Exit Select ' Lock the specified part of the file. Case "L"C Try aFileStream.Lock(textLength - 1, byteCount) Console.WriteLine("The specified part " & _ "of file has been locked.") Catch ex As IOException Console.WriteLine( _ "{0}: The specified part of file " & _ "is already locked.", _ ex.GetType().Name) End Try Exit Select ' Unlock the specified part of the file. Case "U"C Try aFileStream.Unlock( _ textLength - 1, byteCount) Console.WriteLine("The specified part " & _ "of file has been unlocked.") Catch ex As IOException Console.WriteLine( _ "{0}: The specified part of file " & _ "is not locked by the current " & _ "process.", ex.GetType().Name) End Try Exit Select ' Exit the program. Case Else consoleInput = "X"C Exit While End Select End While Finally aFileStream.Close() End Try End Sub End Class
using System; using System.IO; using System.Text; class FStreamLock { static void Main() { UnicodeEncoding uniEncoding = new UnicodeEncoding(); string lastRecordText = "The last processed record number was: "; int textLength = uniEncoding.GetByteCount(lastRecordText); int recordNumber = 13; int byteCount = uniEncoding.GetByteCount(recordNumber.ToString()); string tempString; using(FileStream fileStream = new FileStream( "Test#@@#.dat", FileMode.OpenOrCreate, FileAccess.ReadWrite, FileShare.ReadWrite)) { // Write the original file data. if(fileStream.Length == 0) { tempString = lastRecordText + recordNumber.ToString(); fileStream.Write(uniEncoding.GetBytes(tempString), 0, uniEncoding.GetByteCount(tempString)); } // Allow the user to choose the operation. char consoleInput = 'R'; byte[] readText = new byte[fileStream.Length]; while(consoleInput != 'X') { Console.Write( "\nEnter 'R' to read, 'W' to write, 'L' to " + "lock, 'U' to unlock, anything else to exit: "); if((tempString = Console.ReadLine()).Length == 0) { break; } consoleInput = char.ToUpper(tempString[0]); switch(consoleInput) { // Read data from the file and // write it to the console. case 'R': try { fileStream.Seek(0, SeekOrigin.Begin); fileStream.Read( readText, 0, (int)fileStream.Length); tempString = new String( uniEncoding.GetChars( readText, 0, readText.Length)); Console.WriteLine(tempString); recordNumber = int.Parse( tempString.Substring( tempString.IndexOf(':') + 2)); } // Catch the IOException generated if the // specified part of the file is locked. catch(IOException e) { Console.WriteLine("{0}: The read " + "operation could not be performed " + "because the specified part of the " + "file is locked.", e.GetType().Name); } break; // Update the file. case 'W': try { fileStream.Seek(textLength, SeekOrigin.Begin); fileStream.Read( readText, textLength - 1, byteCount); tempString = new String( uniEncoding.GetChars( readText, textLength - 1, byteCount)); recordNumber = int.Parse(tempString) + 1; fileStream.Seek( textLength, SeekOrigin.Begin); fileStream.Write(uniEncoding.GetBytes( recordNumber.ToString()), 0, byteCount); fileStream.Flush(); Console.WriteLine( "Record has been updated."); } // Catch the IOException generated if the // specified part of the file is locked. catch(IOException e) { Console.WriteLine( "{0}: The write operation could not " + "be performed because the specified " + "part of the file is locked.", e.GetType().Name); } break; // Lock the specified part of the file. case 'L': try { fileStream.Lock(textLength - 1, byteCount); Console.WriteLine("The specified part " + "of file has been locked."); } catch(IOException e) { Console.WriteLine( "{0}: The specified part of file is" + " already locked.", e.GetType().Name); } break; // Unlock the specified part of the file. case 'U': try { fileStream.Unlock( textLength - 1, byteCount); Console.WriteLine("The specified part " + "of file has been unlocked."); } catch(IOException e) { Console.WriteLine( "{0}: The specified part of file is " + "not locked by the current process.", e.GetType().Name); } break; // Exit the program. default: consoleInput = 'X'; break; } } } } }
using namespace System; using namespace System::IO; using namespace System::Text; int main() { UnicodeEncoding^ uniEncoding = gcnew UnicodeEncoding; String^ lastRecordText = "The last processed record number was: "; int textLength = uniEncoding->GetByteCount( lastRecordText ); int recordNumber = 13; int byteCount = uniEncoding->GetByteCount( recordNumber.ToString() ); String^ tempString; FileStream^ fileStream = gcnew FileStream( "Test#@@#.dat",FileMode::OpenOrCreate,FileAccess::ReadWrite,FileShare::ReadWrite ); try { // Write the original file data. if ( fileStream->Length == 0 ) { tempString = String::Concat( lastRecordText, recordNumber.ToString() ); fileStream->Write( uniEncoding->GetBytes( tempString ), 0, uniEncoding->GetByteCount( tempString ) ); } // Allow the user to choose the operation. Char consoleInput = 'R'; array<Byte>^readText = gcnew array<Byte>(fileStream->Length); while ( consoleInput != 'X' ) { Console::Write( "\nEnter 'R' to read, 'W' to write, 'L' to " "lock, 'U' to unlock, anything else to exit: " ); if ( (tempString = Console::ReadLine())->Length == 0 ) { break; } consoleInput = Char::ToUpper( tempString[0] ); switch ( consoleInput ) { case 'R': try { fileStream->Seek( 0, SeekOrigin::Begin ); fileStream->Read( readText, 0, (int)fileStream->Length ); tempString = gcnew String( uniEncoding->GetChars( readText, 0, readText->Length ) ); Console::WriteLine( tempString ); recordNumber = Int32::Parse( tempString->Substring( tempString->IndexOf( ':' ) + 2 ) ); } // Catch the IOException generated if the // specified part of the file is locked. catch ( IOException^ e ) { Console::WriteLine( "{0}: The read " "operation could not be performed " "because the specified part of the " "file is locked.", e->GetType()->Name ); } break; // Update the file. case 'W': try { fileStream->Seek( textLength, SeekOrigin::Begin ); fileStream->Read( readText, textLength - 1, byteCount ); tempString = gcnew String( uniEncoding->GetChars( readText, textLength - 1, byteCount ) ); recordNumber = Int32::Parse( tempString ) + 1; fileStream->Seek( textLength, SeekOrigin::Begin ); fileStream->Write( uniEncoding->GetBytes( recordNumber.ToString() ), 0, byteCount ); fileStream->Flush(); Console::WriteLine( "Record has been updated." ); } // Catch the IOException generated if the // specified part of the file is locked. catch ( IOException^ e ) { Console::WriteLine( "{0}: The write operation could not " "be performed because the specified " "part of the file is locked.", e->GetType()->Name ); } break; // Lock the specified part of the file. case 'L': try { fileStream->Lock( textLength - 1, byteCount ); Console::WriteLine( "The specified part " "of file has been locked." ); } catch ( IOException^ e ) { Console::WriteLine( "{0}: The specified part of file is" " already locked.", e->GetType()->Name ); } break; // Unlock the specified part of the file. case 'U': try { fileStream->Unlock( textLength - 1, byteCount ); Console::WriteLine( "The specified part " "of file has been unlocked." ); } catch ( IOException^ e ) { Console::WriteLine( "{0}: The specified part of file is " "not locked by the current process.", e->GetType()->Name ); } break; default: // Exit the program. consoleInput = 'X'; break; } } } finally { fileStream->Close(); } }
import System.*; import System.IO.*; import System.Text.*; class FStreamLock { public static void main(String[] args) { UnicodeEncoding uniEncoding = new UnicodeEncoding(); String lastRecordText = "The last processed record number was: "; int textLength = uniEncoding.GetByteCount(lastRecordText); int recordNumber = 13; int byteCount = uniEncoding.GetByteCount( (new Integer(recordNumber)).ToString()); String tempString; FileStream fileStream = new FileStream ("Test#@@#.dat", FileMode.OpenOrCreate, FileAccess.ReadWrite , FileShare.ReadWrite); try { // Write the original file data. if ( fileStream.get_Length() == 0 ) { tempString = lastRecordText +( new Integer( recordNumber)).ToString(); fileStream.Write(uniEncoding.GetBytes(tempString), 0, uniEncoding.GetByteCount(tempString)); } // Allow the user to choose the operation. char consoleInput = 'R'; ubyte readText[] = new ubyte[(int) fileStream.get_Length() ]; while((consoleInput != 'X')) { Console.Write(("\nEnter 'R' to read,'W' to write, 'L' to " + "lock, 'U' to unlock, anything else to exit: ")); if (((String)(tempString = Console.ReadLine())).get_Length() == 0) { break ; } consoleInput = Char.ToUpper( tempString.get_Chars(0)); switch(consoleInput) { // Read data from the file and // write it to the console. case 'R' : try { fileStream.Seek(0, SeekOrigin.Begin); fileStream.Read(readText, 0, (int)(fileStream.get_Length())); tempString = new String( uniEncoding.GetChars(readText, 0, readText.length )); Console.WriteLine(tempString); recordNumber = Int32.Parse( tempString.Substring( tempString.IndexOf(':') + 2)); } // Catch the IOException generated if the // specified part of the file is locked. catch(IOException e) { Console.WriteLine("{0}: The read " + "operation could not be performed " + "because the specified part of the " + "file is locked.", e.GetType().get_Name()); } break; // Update the file. case 'W' : try { fileStream.Seek(textLength, SeekOrigin.Begin); fileStream.Read(readText, textLength - 1, byteCount); tempString = new String(uniEncoding.GetChars( readText, textLength - 1, byteCount)); recordNumber = Int32.Parse(tempString)+1; fileStream.Seek(textLength, SeekOrigin.Begin); fileStream.Write(uniEncoding.GetBytes( (new Integer( recordNumber)).ToString()) , 0, byteCount); fileStream.Flush(); Console.WriteLine("Record has been updated."); } // Catch the IOException generated if the // specified part of the file is locked. catch(IOException e) { Console.WriteLine( "{0}: The write operation could not " + "be performed because the specified " + "part of the file is locked.", e.GetType().get_Name()); } break; // Lock the specified part of the file. case 'L' : try { fileStream.Lock(textLength - 1, byteCount); Console.WriteLine(("The specified part " + "of file has been locked.")); } catch(IOException e) { Console.WriteLine ("{0}: The specified part of file is" + " already locked.", e.GetType().get_Name()); } break; // Unlock the specified part of the file. case 'U' : try { fileStream.Unlock(textLength - 1, byteCount); Console.WriteLine(("The specified part " + "of file has been unlocked.")); } catch(IOException e) { Console.WriteLine( "{0}: The specified part of file is " + "not locked by the current process." , e.GetType().get_Name()); } break; // Exit the program. default : // Exit the program. consoleInput = 'X'; break; } } } finally { fileStream.Dispose(); } } //main } //FStreamLock

Windows 98, Windows 2000 SP4, Windows Millennium Edition, Windows Server 2003, Windows XP Media Center Edition, Windows XP Professional x64 Edition, Windows XP SP2, Windows XP Starter Edition
開発プラットフォームの中には、.NET Framework によってサポートされていないバージョンがあります。サポートされているバージョンについては、「システム要件」を参照してください。


Weblioに収録されているすべての辞書からFileStream.Lock メソッドを検索する場合は、下記のリンクをクリックしてください。

- FileStream.Lock メソッドのページへのリンク