Точная Аудио Копия прокладывает себе путь на Windows XP. Стандартный файл открывается, диалоговое окно показывают, но поле имени файла содержит текст "Имя файла, будет проигнорирован".
Просто предположение здесь, но я подозреваю, что строка введена в средства редактирования поля комбинированного списка каждый раз, когда существенное изменение внесено в диалоговое окно. Пока поле не является пробелом, и диалоговые флаги установлены не проверить существование файла, диалоговое окно может обычно закрываться.
Редактирование: это намного легче, чем я думал. Вот является код в C++ / MFC, можно перевести его в среду по Вашему выбору.
CFileDialog dlg(true, NULL, "Filename will be ignored", OFN_HIDEREADONLY | OFN_NOVALIDATE | OFN_PATHMUSTEXIST | OFN_READONLY, NULL, this);
dlg.DoModal();
Редактирование 2: Это должно быть переводом в C#, но я не бегло говорю на C#, так не стреляйте в меня, если он не работает.
OpenFileDialog openFileDialog1 = new OpenFileDialog();
openFileDialog1.FileName = "Filename will be ignored";
openFileDialog1.CheckPathExists = true;
openFileDialog1.ShowReadOnly = false;
openFileDialog1.ReadOnlyChecked = true;
openFileDialog1.CheckFileExists = false;
openFileDialog1.ValidateNames = false;
if(openFileDialog1.ShowDialog() == DialogResult.OK)
{
// openFileDialog1.FileName should contain the folder and a dummy filename
}
Редактирование 3: Наконец посмотрел на фактическое рассматриваемое диалоговое окно, в Visual Studio 2005 (у меня не было доступа к нему ранее). Это не стандартный файл открытое диалоговое окно! , Если Вы осматриваете окна в Шпионе ++ и сравниваете их со стандартным открытым файлом, Вы будете видеть, что структура и имена классов не соответствуют. Когда Вы смотрите тесно, можно также определить некоторые различия между содержанием диалоговых окон. Мое заключение состоит в том, что Microsoft полностью заменила стандартное диалоговое окно в Visual Studio, чтобы дать ему эту возможность. Мое решение или что-то подобное будут так близки, как можно добраться, если Вы не готовы кодировать свое собственное с нуля.
Я решил эту проблему, установив прокси-сервер между браузером и службой, требующей аутентификации, в моем случае - сервлетом Java. Браузер отправляет запрос AJAX сервлету, который пересылает запрос службе, а затем отправляет обратно ответ службы, опуская заголовок «WWW-Authenticate». Ваше приложение для браузера. обрабатывает код ответа HTTP 200 или 401 соответственно.
Точно так же прокси всегда может вернуть 200 с ответом json, указывающим результаты перенаправленного запроса. Таким образом, вы сможете различить разницу между отказом вашего прокси-сервера и ответом службы.
Возможно, вам придется иметь дело с одной сложной вещью - если удаленная служба отвечает заголовком set-cookie, скажем, потому что это создал сеанс для вашего клиента, тогда у вас есть (как минимум) 2 возможных пути.
Instead of the url string being "http://blah.com", make it "http://user:password@blah.com"
// Note that you might need to trim http:// out of endpoint first
url: 'http://' + username + ':' + password + '@' + endpoint,
Без jquery (не работает в IE, но это нормально для расширений firefox):
var xhr = new XMLHttpRequest();
xhr.open("GET", "http://example.com", true, "username", "password");
xhr.onreadystatechange = function(){
if(this.readyState == 4){
if(this.status == 200){
alert("we got a response");
}
}
}
xhr.send();
Как насчет того, чтобы не использовать HTTP-аутентификацию? Используйте стандартный вход с файлами cookie или просто отправьте POST имя пользователя и пароль, которые пользователь вводит в сценарий, и проверьте данные по базе данных пользователей.
Вы не можете сделать это в IE или firefox, и вы никогда не сможете сделать это из javascript по соображениям безопасности. В браузере нет настроек, позволяющих избежать запроса на HTTP-аутентификацию. Это очень раздражает, когда у вас есть 50 изображений, для которых требуется HTTP-аутентификация.