Открыть файл, который уже открыт в проводнике

Я пытаюсь открыть файл, используя OpenFileDialog.

if (openFileDialog1.FileName != "" && resultSaveDialog == System.Windows.Forms.DialogResult.OK)
        {
            openFileDialog1.OpenFile(); // Throw Exception Here
            txtFileName.Text = openFileDialog1.SafeFileName;                
        }

Но если файл уже открыт в исследованном окне, он выдает следующее исключение

Процесс не может получить доступ к файлу «D:\Projects\CDR_RAW_FILES\GroupData\8859511378.xls», так как он используется другим процессом.

Можно ли открыть файл с помощью OpenFileDialog, даже если файл уже открыт в проводнике.


person Rajeev Kumar    schedule 13.05.2013    source источник
comment
(Клонировать/копировать) и открыть   -  person Eugene    schedule 13.05.2013
comment
почему вы хотите открыть файл...? получить какие-либо данные...? или просто прочитать имя файла...?   -  person Pandian    schedule 13.05.2013
comment
@Pandian Просто чтобы получить имя и путь к открытому файлу   -  person Rajeev Kumar    schedule 13.05.2013
comment
@RajeevKumar вам просто нужно имя файла и его путь, затем попробуйте решение, которое я добавил   -  person Pandian    schedule 13.05.2013


Ответы (3)


Хорошо, если вам просто нужно имя выбранного файла и его путь, попробуйте, как показано ниже, это поможет вам...

if (openFileDialog1.FileName != "" && resultSaveDialog == System.Windows.Forms.DialogResult.OK)
{
 string path = Path.GetDirectoryName(openFileDialog1.FileName);
 string filename = Path.GetFileName(openFileDialog1.FileName);
 txtFileName.Text = filename;
}
person Pandian    schedule 13.05.2013

Да, это возможно при некоторых обстоятельствах: Первая возможность: другая программа не блокирует файл (например, позволяет себе только изменять файл), после чего вы можете открыть его без проблем. Вторая возможность: вашей программе не нужно ЗАПИСАТЬ в файл, а нужно только прочитать его, вы можете открыть его в режиме только для чтения. Я не очень хорошо знаком с Winforms, но ваш метод Openfiledialog.OPenfile, похоже, открывает файл в режиме «чтения и записи», поэтому вторая возможность отсутствует. Однако, если вы хотите использовать классы в My.Computer, вы можете просто открыть файл с помощью таких методов, как readalltext (в зависимости от ваших проблем), которые должны принимать перегрузки только для чтения.

person Christian Sauer    schedule 13.05.2013
comment
msdn.microsoft .com/en-us/library/ Как и на их странице MSDN, метод OpenFile() по умолчанию открывается в режиме только для чтения. - person Tom 'Blue' Piddock; 13.05.2013

Просто добавьте, что вы можете получить имя файла перед открытием файла с помощью метода OpenFile(). Используйте свойства SafeFileName или FileName, чтобы получить его.

if (openFileDialog1.FileName != "" && 
    resultSaveDialog == System.Windows.Forms.DialogResult.OK)
    {
        txtFileName.Text = openFileDialog1.SafeFileName;                
    }

Хотя я не проверял это, SafeFileName должен работать для того, что вам нужно, если все, что вам нужно, это имя файла, а не путь_.

Если вам нужен полный путь к вашему файлу, а не только имя файла и расширение, используйте FileName:

if (openFileDialog1.FileName != "" && 
    resultSaveDialog == System.Windows.Forms.DialogResult.OK)
    {
        txtFileName.Text = openFileDialog1.FileName;                
    }

Имя файла включает в себя как путь к файлу, так и расширение. Если файлы не выбраны, этот метод возвращает пустую строку ("").

person Tom 'Blue' Piddock    schedule 13.05.2013