Версия для печати темы
Нажмите сюда для просмотра этой темы в оригинальном формате
Форум программистов > Общие вопросы по .NET и C# > OpenFileDiolog - передать путь не файла (ов) а дир


Автор: Мурлыкатам_ 18.11.2007, 16:54
Для передачи строковых значений путей к передаваемым на сервер файлам использую - OpenFileDialog, возникает вопрос, как сделать так чтобы юзер кликнув по папке и нажав "открыть" передал путь папки и завершил файл диалог???
Это очень важно для меня, если кто нить имеет идеи по этому поводу пожалуйсто поделитесь!
Зараннее спасибо.

З.Ы. мне кажеться, что решение простое, но просто я чего-то не знаю :((((

Автор: thomas 18.11.2007, 21:21
Мурлыкатам_, 
Приветствую
Цитата

мне кажеться, что решение простое, но просто я чего-то не знаю

Ты не поверишь, действительно есть простое решение.  smile 
И знаешь как оно называется?  smile 
FolderBrowserDialog, во как.
И находиться эта фича на две строчки выше OpenFileDialog  в ToolBox студии в разделе Dialogs.
Успехов.  smile 

Автор: Мурлыкатам_ 19.11.2007, 19:37
Приветствую, thomas,  
у меня следующая задача - передавать файл, файлы или все файлы из папки на удаленную машину.
Как красиво организовать диалог выбора файлов для передачи?
Потомучто FolderBrowserDialog - какой-то непонятный (наверное потому что нету св-ва FileNames  smile ).
Или плз мелкий пример обработки файлов через этот контрол.  smile 

Автор: 1stain 19.11.2007, 20:19
или OpenFileDialog с Multiselect = true, или делай свой контрол на манер проводника

Автор: thomas 19.11.2007, 20:29
Мурлыкатам_, 
Приветствую.
Вопрос стоял как передать путь к папке.
Цитата

как сделать так чтобы юзер кликнув по папке и нажав "открыть" передал путь папки и завершил файл диалог???

Я предложил соответствующий контрол, который выбирает папки.
Ежели нужен файл, то для этого используется другой контрол, который и был использован. Но он указывает путь к файлу.
И отвечает этому вопросу
Цитата

Как красиво организовать диалог выбора файлов для передачи?

Если из того что выдает OpenFileDialog нужно получить имя файла и путь к нему отдельно, то используем методы класса String и парсим строку.
Что-то типа этого
Код

dlgOpenFile.InitialDirectory = Application.StartupPath & "\foto"
dlgOpenFile.ShowDialog()
Dim pad As String = dlgOpenFile.FileName 'получил ПОЛНОЕ имя выбранного файла
Me.LG_fotoPictureBox.Image = Image.FromFile(pad)
Dim ind As Integer = InStrRev(pad, "\foto") 'нашёл позицию последнего бекслеша
Me.LG_fotopathTextBox.Text = pad.Substring(ind - 1) 'типа отобразил путь к файлу в текстбоксе

Описание функции а Object Browser-е студии.
Цитата

Public Function InStrRev(ByVal StringCheck As String, ByVal StringMatch As String, Optional ByVal Start As Integer = -1, Optional ByVal Compare As Microsoft.VisualBasic.CompareMethod = Binary) As Integer
     Member of: Microsoft.VisualBasic.Strings
Summary:
Returns the position of the first occurrence of one string within another, starting from the right side of the string.

Parameters:
Start: Optional. Numeric expression setting the one-based starting position for each search, starting from the left side of the string. If Start is omitted then –1 is used, meaning the search begins at the last character position. Search then proceeds from right to left.
StringMatch: Required. String expression being searched for.
Compare: Optional. Numeric value indicating the kind of comparison to use when evaluating substrings. If omitted, a binary comparison is performed. See Settings for values.
StringCheck: Required. String expression being searched.

Return Values:
If StringCheck is zero-length, InStrRev returns 0. If StringMatch is zero-length, InStrRev returns Start. If StringMatch is not found, InStrRev returns 0. If StringMatch is found within StringCheck, InStrRev returns position at which the first match is found, starting with the right side of the string. If Start is greater than length of StringMatch, InStrRev returns 0.

 

Автор: 1stain 19.11.2007, 20:50
для работы с путями есть статический класс System.IO.Path
Код

    string filePath = @"C:\XXX\YYY\ZZZ\test.txt";
        string directoryPath = Path.GetDirectoryName(filePath);

Автор: Domovik 22.11.2007, 10:25
А вообще, в данном случае, очень удобен будет класс http://msdn2.microsoft.com/en-us/library/system.io.fileinfo.aspx. Тут тебе и вся информация о файле (включая те же пути) и возможность получения файлового потока на этот файл, и многое, многое другое smile. Единственный минус, что нельзя задать  права дочтупа при получение http://msdn2.microsoft.com/en-us/library/system.io.filestream.aspx для других программ, по-умолчанию, вроде бы, они устанавливаются в "только для чтения".

Автор: Мурлыкатам_ 22.11.2007, 19:29
У мя есть приложение которое все это уже делает openFileDialog-om, возник вопрос, что если в диалоге кликнуть на папку, то откроется ее содержимое, а можно в файл диалоге перекрыть чего нить чтобы при клике на "открыть" при выделенной папке - передавался путь этой папки. А файлы и так открываются, и мультиселектом и по одному... Мне нуна еще и папку как-то обработать.
Есть мысли?
Domovik, ты это все к чему?

Автор: 1stain 22.11.2007, 19:39
не устраивают стандартные средства? Тебя же никто за руки-ноги не держит - разрабатывай юзерконтролы...
сделай что-то наподобии проводника - сплит: слева- директории, справа - файлы. И выбирай что хочешь

Автор: Мурлыкатам_ 22.11.2007, 19:48
Я не умею делать свои контролы.  smile 

Автор: Experimenter 22.11.2007, 19:53
Мурлыкатам_, 1stain, не надо юзерконтролов, вполне для этих целей подойдет ListView, классный штук.

Автор: thomas 22.11.2007, 21:35
Мурлыкатам_, 
Приветствую.
В который раз перечитываю эту тему. И все ни как понять не могу. Если тебе надо передавать файл(ы) и программа это делает, зачем тебе еще и папку обрабатывать?
И что ты понимаешь под этим выражением?
Цитата

Мне нуна еще и папку как-то обработать.

Если тебе для чего то нужно отделить мух от котлет, т.е. из полного имени файла, которое тебе выдает OpenFileDialog, выделить путь и имя папки, в которой лежит этот файл, то
я тебе уже писал
Цитата

используем методы класса String и парсим строку.


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

Как вариант можно использовать комбинацию FolderBrowserDialog с OpenFileDialog
в первом выбираешь директорию и он тебе возвращает путь к ней в переменную
а второй открываешь в этой директории и выбираешь файл(ы)
Код

        DialogResult result = folderBrowserDialog1.ShowDialog();
        if( result == DialogResult.OK )
        {
            folderName = folderBrowserDialog1.SelectedPath;
            if(!fileOpened)
            {
                // No file is opened, bring up openFileDialog in selected path.
                openFileDialog1.InitialDirectory = folderName;
                openFileDialog1.ShowDialog();
                fileName = openFileDialog1.FileName;
            } 
        }
 

Автор: Мурлыкатам_ 22.11.2007, 22:47
Цитата

Как вариант можно использовать комбинацию FolderBrowserDialog с OpenFileDialog
в первом выбираешь директорию и он тебе возвращает путь к ней в переменную
а второй открываешь в этой директории и выбираешь файл(ы)


А мне нуна с точностью наоборот smile)))))  smile 

Эх... Понятно, спасибо за идеи.
Похоже все таки придеться в меню разделять выбор передать файлы или папку :(

Спасибо за помощь!!!

Powered by Invision Power Board (http://www.invisionboard.com)
© Invision Power Services (http://www.invisionpower.com)