Để kiểm tra xem có tệp nào đang được sử dụng hay không (mở), hãy sử dụng File Stream
.
Ví dụ:
Giả sử bạn có một đường dẫn tập tin lưu trữ trong txtAttachPath.Text
và bạn muốn mở tập tin đó nếu nó chưa được mở, bạn cần phải kiểm tra xem các tập tin được mở đầu tiên sau đó mở nó, đây là làm thế nào để làm điều đó:
tạo ra một phương pháp để kiểm tra xem tập tin đang mở:
private bool attachedFileIsOpen(FileInfo file)
{
FileStream fs = null;
try
{
fs = file.Open(FileMode.Open, FileAccess.ReadWrite, FileShare.None);
}
catch (IOException ioe)
{
MessageBox.Show("The attachment file is already open!, can't open more than once!", "AMP Warning", MessageBoxButtons.OK, MessageBoxIcon.Information);
return true;
}
finally
{
if (fs != null) fs.Close();
}
return false;
}
phương pháp này sẽ kiểm tra nếu tập tin được mở và retrun đúng với một thông điệp tới người dùng rằng tập tin là aleardy mở, nếu không nó sẽ trả về false (tập tin là không sử dụng).
Tiếp theo sử dụng phương pháp kích hoạt bởi bất kỳ sự kiện bạn chọn:
FileInfo filePath = new FileInfo(txtAttachPath.Text);
if (!txtAttachPath.Text.Equals("No Attachment")
&& attachedFileIsOpen(filePath) == false
&& processIsRunning("notepad") == false)
{
Process openFilebyExtension = Process.Start(txtAttachPath.Text);
openFilebyExtension.WaitForInputIdle();
NativeWindow.FromHandle(this.Handle);
}
Note một số được xây dựng trong chương trình cửa sổ như notepad cho phép nhiều trường hợp của cùng một tập tin được mở ra, do đó không thể phát hiện theo phương pháp File Stream
, giải pháp khác cho nó là để phát hiện nếu quá trình đang chạy.
bạn sẽ cần phải thêm một phương pháp khác để kiểm tra quá trình kết hợp với loại tập tin bạn đang cố gắng để mở chạy:
private bool processIsRunning(string process)
{
Process[] runningProcesses = Process.GetProcessesByName(process);
bool processIsRunning = false;
if(runningProcesses.Length == 0)
{
processIsRunning = false;
}
else
{
processIsRunning = true;
MessageBox.Show("The attachment file is already open!, can't open more than once!", "AMP Warning",
MessageBoxButtons.OK, MessageBoxIcon.Information);
}
return processIsRunning;
}
bất kỳ giải pháp cuối cùng với mã nguồn đầy đủ? – Kiquenet