我正在使用VS2010上的C#編寫文件更新/解鎖應用程序。 我想要的是使用我的應用程序使用密碼鎖定文件,然後隨時解鎖它。永久鎖定文件
實際上,我使用了下面的代碼來鎖定文件,但只在應用程序仍在運行時鎖定文件;當我關閉應用程序時,文件被解鎖。
using System;
using System.Collections.Generic;
using System.Text;
using System.IO;
using System.Configuration;
using System.Windows.Forms;
namespace LockFile
{
public enum LockStatus
{
Unlocked,
Locked
}
public class LockFilePresenter
{
private ILockFileView view;
private string file2Lock = string.Empty;
private FileStream fileLockStream = null;
public LockFilePresenter(ILockFileView view)
{
this.view = view;
}
internal void LockFile()
{
if (string.IsNullOrEmpty(file2Lock) || !File.Exists(file2Lock))
{
view.ShowMessage("Please select a path to lock.");
return;
}
if (fileLockStream != null)
{
view.ShowMessage("The path is already locked.");
return;
}
try
{
fileLockStream = File.Open(file2Lock, FileMode.Open);
fileLockStream.Lock(0, fileLockStream.Length);
view.SetStatus(LockStatus.Locked);
}
catch (Exception ex)
{
fileLockStream = null;
view.SetStatus(LockStatus.Unlocked);
view.ShowMessage(string.Format("An error occurred locking the path.\r\n\r\n{0}", ex.Message));
}
}
internal void UnlockFile()
{
if (fileLockStream == null)
{
view.ShowMessage("No path is currently locked.");
return;
}
try
{
using (fileLockStream)
fileLockStream.Unlock(0, fileLockStream.Length);
}
catch (Exception ex)
{
view.ShowMessage(string.Format("An error occurred unlocking the path.\r\n\r\n{0}", ex.Message));
}
finally
{
fileLockStream = null;
}
view.SetStatus(LockStatus.Unlocked);
}
internal void SetFile(string path)
{
if (ValidateFile(path))
{
if (fileLockStream != null)
UnlockFile();
view.SetStatus(LockStatus.Unlocked);
file2Lock = path;
view.SetFile(path);
}
}
internal bool ValidateFile(string path)
{
bool exists = File.Exists(path);
if (!exists)
view.ShowMessage("File does not exist.");
return exists;
}
}
}
和
using System;
using System.Collections.Generic;
using System.Text;
namespace LockFile
{
public interface ILockFileView
{
void ShowMessage(string p);
void SetStatus(LockStatus lockStatus);
void SetFile(string path);
}
}
正如我以前說過,應用程序在運行時工作正常,但是當我關閉它,鎖定的文件將被解鎖。
如果任何人有任何想法如何做到這一點,我將不勝感激。
'鎖定'這裏是特定於線程,所以當你關閉應用程序(並殺死線程)時,其他程序可以訪問該文件。我想你可能想研究密碼保護/加密。 – Laurence
不知何故,我認爲你濫用鎖定系統是不應該做的事情;它不是關於訪問權限,而是關於確保應用程序不會無效輸入或弄亂文件。 –
@owlstead所以你建議做什麼? .. 有什麼建議嗎? 謝謝 – Hassanation