Модераторы: Partizan, gambit
  

Поиск:

Ответ в темуСоздание новой темы Создание опроса
> Процесс не может получить доступ к файлу? Доступ к файлу нескольких процессов 
:(
    Опции темы
myendlessness
Дата 4.8.2009, 13:50 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


Профиль
Группа: Участник
Сообщений: 113
Регистрация: 8.8.2008

Репутация: нет
Всего: нет



Ребята возник такой вопрос! 

Есть такой код, в общем получаю рисунок:

 
Код

OpenFileDialog ofd = new OpenFileDialog();
Bitmap picture = new Bitmap(ofd.FileName);
pictureBox1.Image = (Image)picture;


Затем мне дальше нужно использовать этот рисунок, пишу такой код:

FileStream Tiff = new FileStream(ofd.FileName, FileMode.Open,FileAccess.ReadWrite,FileShare.ReadWrite);

на что мне выдаёт ошибку: 
Процесс не может получить доступ к файлу , так как этот файл используется другим процессом.

Как мне использовать рисунок в нескольких процессах? 


PM MAIL   Вверх
diadiavova
Дата 4.8.2009, 14:46 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Доктор Зло(диагност, настоящий, с лицензией и полномочиями)
****


Профиль
Группа: Модератор
Сообщений: 5821
Регистрация: 14.8.2008
Где: В Коньфпольте

Репутация: 31
Всего: 142



myendlessness, а что с моим примером, приведённым в предыдущей теме? smile 


--------------------
Хочешь получить мудрый совет - читай подписи участников форумов.
Злой доктор Щасзаболит smile
PM   Вверх
myendlessness
Дата 5.8.2009, 15:09 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


Профиль
Группа: Участник
Сообщений: 113
Регистрация: 8.8.2008

Репутация: нет
Всего: нет



Что-то я иногда перерабатываю)) Не знаю даже что сказать, заметил только Ваши слова, что нужно создавать новую тему, а код пропустил, даже не знаю иногда видимо в моей голове глюки smile  

Ваш код взял, но что-то не хочет работать, видимо надо немного объяснить суть задачи. Смысл такой есть программа я загружаю на форму фотографию
Код

//The open window
        private void openToolStripMenuItem_Click(object sender, EventArgs e)
        {
            
            ofd.Title = "Open a Tiff File";
            ofd.Filter = "Tiff File (*.tif)|*.tif|All Files (*.*)|*.*";

            DialogResult dr = ofd.ShowDialog();
            if (dr == DialogResult.OK)
            {
                System.IO.StreamReader sr = new System.IO.StreamReader(ofd.FileName);

                Form activeChildForm = this.ActiveMdiChild;

                if (activeChildForm != null)
                {
                    TextBox activeTextBox = (TextBox)activeChildForm.ActiveControl;

                    if (activeTextBox != null)
                        activeTextBox.Text = sr.ReadToEnd();

                    sr.Close();
                }
            }
            if (ofd.FileName != "")
            {
                using (Image origImg = Image.FromFile(ofd.FileName))
                {
                    pictureBox1.Image = new Bitmap(origImg);
                }
            }
            
        }


Дальше это фотография остаётся на форме, но я хочу её сжать и нажимаю кнопку 
Код

//The encode button
        private void button1_Click(object sender, EventArgs e)
        {
            //Open files
            FileStream Tiff = new FileStream(ofd.FileName, FileMode.Open, FileAccess.ReadWrite, FileShare.ReadWrite);
 
То есть я в другой процедуре вновь обращаюсь к этому рисунку, а оно мне пишет, что процесс не может получить доступ к файлу. 

СПАСИБО ЗА ТО ЧТО ПОМОГАЕТЕ smile

Добавлено через 1 минуту и 47 секунд
Хотел уточнить ещё один момент, какие настройки нужно изменить, чтобы при растягивании формы всё растягивалось соответсвенно форме?

Добавлено через 5 минут и 36 секунд
АГА сделал вот так и оно заработало, только я боюсь, что могут выскочить какие-то глюки, но вроде работало, подскажи как сделать лучше кнопку Open file?
Код

private void openToolStripMenuItem_Click(object sender, EventArgs e)
        {
            
            ofd.Title = "Open a Tiff File";
            ofd.Filter = "Tiff File (*.tif)|*.tif|All Files (*.*)|*.*";

            DialogResult dr = ofd.ShowDialog();
            if (dr == DialogResult.OK)
            {
                using (System.IO.StreamReader sr = new System.IO.StreamReader(ofd.FileName))
                {

                    Form activeChildForm = this.ActiveMdiChild;

                    if (activeChildForm != null)
                    {
                        TextBox activeTextBox = (TextBox)activeChildForm.ActiveControl;

                        if (activeTextBox != null)
                            activeTextBox.Text = sr.ReadToEnd();

                        sr.Close();
                    }
                }
            }
            if (ofd.FileName != "")
            {
                using (Image origImg = Image.FromFile(ofd.FileName))
                {
                    pictureBox1.Image = new Bitmap(origImg);
                }
            }
            
        }


PM MAIL   Вверх
diadiavova
Дата 5.8.2009, 15:56 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Доктор Зло(диагност, настоящий, с лицензией и полномочиями)
****


Профиль
Группа: Модератор
Сообщений: 5821
Регистрация: 14.8.2008
Где: В Коньфпольте

Репутация: 31
Всего: 142



Код

private void openToolStripMenuItem_Click(object sender, EventArgs e)
        {
            
            ofd.Title = "Open a Tiff File";
            ofd.Filter = "Tiff File (*.tif)|*.tif|All Files (*.*)|*.*";
            if (ofd.ShowDialog() == DialogResult.OK)
            {
                    Form activeChildForm = this.ActiveMdiChild;
                    if (activeChildForm != null)
                    {
                        TextBox activeTextBox = (TextBox)activeChildForm.ActiveControl;
                        if (activeTextBox != null)
                            activeTextBox.Text = System.IO.File.ReadAllText(ofd.FileName);
                        sr.Close();
                    }
                using (Image origImg = Image.FromFile(ofd.FileName))
                {
                    pictureBox1.Image = new Bitmap(origImg);
                }
            }


            
        }

Тут главное исправление, что подгрузка изображения должна осуществляться в том же ифе, где проверяется диалогрезульт. Причина очень простая, в твоём случае, при втором вызове проверку на непустую строку свойство пройдёт, тоько при этом загрузит картинку, которая была вызвана в предыдущий раз. А диалогрезульт покажет выбрал ли пользователь файл при последнем вызове окна.
Остальные исправления - косметические.


--------------------
Хочешь получить мудрый совет - читай подписи участников форумов.
Злой доктор Щасзаболит smile
PM   Вверх
myendlessness
Дата 6.8.2009, 10:42 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


Профиль
Группа: Участник
Сообщений: 113
Регистрация: 8.8.2008

Репутация: нет
Всего: нет



Да ДядяВова всё верно, сразу и не сообразил, что действительно будет подгружать вне зависимости от диалогрезаулт. Единственное для тех кто будет пользоваться кодом, нужно удалить строку sr.Close();

В общем конечный код:
Код

private void openToolStripMenuItem_Click(object sender, EventArgs e)
        {
            
            ofd.Title = "Open a Tiff File";
            ofd.Filter = "Tiff File (*.tif)|*.tif|All Files (*.*)|*.*";
            if (ofd.ShowDialog() == DialogResult.OK)
            {
                    Form activeChildForm = this.ActiveMdiChild;
                    if (activeChildForm != null)
                    {
                        TextBox activeTextBox = (TextBox)activeChildForm.ActiveControl;
                        if (activeTextBox != null)
                            activeTextBox.Text = System.IO.File.ReadAllText(ofd.FileName);
                    }
                using (Image origImg = Image.FromFile(ofd.FileName))
                {
                    pictureBox1.Image = new Bitmap(origImg);
                }
            }
        }

 
Как же всё-таки всё компактно получается когда знаешь язык, СПАСИБО ДЯДЯВОВА! 

Вопросов возникает много по ходу программирования, стараюсь разбираться сам, но всё равно порой не находишь нужных ответов, чтобы не создавать много разных веток, хотел ещё уточнить как растягивать элементы вместе с формой? Если я увеличил форму, то например чтобы PictureBox тоже увеличился? Пробовал использовать Dock, но получается криво, наверное нужно прописывать всё ручками и привязывать к границам формы? Или есть другие способы? 
PM MAIL   Вверх
diadiavova
Дата 6.8.2009, 11:53 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Доктор Зло(диагност, настоящий, с лицензией и полномочиями)
****


Профиль
Группа: Модератор
Сообщений: 5821
Регистрация: 14.8.2008
Где: В Коньфпольте

Репутация: 31
Всего: 142



Цитата(myendlessness @  6.8.2009,  11:42 Найти цитируемый пост)
Единственное для тех кто будет пользоваться кодом, нужно удалить строку sr.Close();

Я её не заметил. В принципе можно либо юзинг, либо клоуз, но не то и другое вместе ессно.

Цитата(myendlessness @  6.8.2009,  11:42 Найти цитируемый пост)
Вопросов возникает много по ходу программирования, стараюсь разбираться сам, но всё равно порой не находишь нужных ответов, чтобы не создавать много разных веток, хотел ещё уточнить как растягивать элементы вместе с формой? Если я увеличил форму, то например чтобы PictureBox тоже увеличился? Пробовал использовать Dock, но получается криво, наверное нужно прописывать всё ручками и привязывать к границам формы? Или есть другие способы?  

Для этог есть свойства Dock и Anchor (в зависимости от задачи) а так же надо использовать контейнеры(панельки всевозможные). В принципе таким ообразом можно почти любую логику описать без единой строчки ручного кода.


--------------------
Хочешь получить мудрый совет - читай подписи участников форумов.
Злой доктор Щасзаболит smile
PM   Вверх
myendlessness
Дата 13.8.2009, 15:40 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


Профиль
Группа: Участник
Сообщений: 113
Регистрация: 8.8.2008

Репутация: нет
Всего: нет



ДядяВова с Dock и Anchor  я разобрался в общем-то кое-что сделать можно, но всё равно получается криво. Вот например у меня есть две кнопки, пару радиобатоннов + ещё всякие лейблы и всё это находится на правой стороне основной формы, я меняю форму а это остаётся на своём месте, либо растягивается, либо.. А вот так чтобы как в нормальных человеческих программах, всё оставалось на своих местах, то есть программа и в маленьком и в большом окне смотрелась по-человечески? 
PM MAIL   Вверх
diadiavova
Дата 13.8.2009, 16:19 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Доктор Зло(диагност, настоящий, с лицензией и полномочиями)
****


Профиль
Группа: Модератор
Сообщений: 5821
Регистрация: 14.8.2008
Где: В Коньфпольте

Репутация: 31
Всего: 142



myendlessness, Используй контейнеры. Они в в тулбаре выделены в отдельный раздел. Более конкретно скажу, если объяснишь, что значит

Цитата(myendlessness @  13.8.2009,  16:40 Найти цитируемый пост)
как в нормальных человеческих программах, всё оставалось на своих местах, то есть программа и в маленьком и в большом окне смотрелась по-человечески

Но там , я думаю и так понятно всё.


--------------------
Хочешь получить мудрый совет - читай подписи участников форумов.
Злой доктор Щасзаболит smile
PM   Вверх
myendlessness
Дата 14.8.2009, 10:45 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


Профиль
Группа: Участник
Сообщений: 113
Регистрация: 8.8.2008

Репутация: нет
Всего: нет



ДядяВова Спасибо. С контейнерами разобрался, всё сделал как хотел smile 
PM MAIL   Вверх
  
Ответ в темуСоздание новой темы Создание опроса
Прежде чем создать тему, посмотрите сюда:
mr.DUDA
THandle

Используйте теги [code=csharp][/code] для подсветки кода. Используйтe чекбокс "транслит" если у Вас нет русских шрифтов.
Что делать если Вам помогли, но отблагодарить помощника плюсом в репутацию Вы не можете(не хватает сообщений)? Пишите сюда, или отправляйте репорт. Поставим :)
Так же не забывайте отмечать свой вопрос решенным, если он таковым является :)


Если Вам понравилась атмосфера форума, заходите к нам чаще! С уважением, mr.DUDA, THandle.

 
0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей)
0 Пользователей:
« Предыдущая тема | Общие вопросы по .NET и C# | Следующая тема »


 




[ Время генерации скрипта: 0.0659 ]   [ Использовано запросов: 22 ]   [ GZIP включён ]


Реклама на сайте     Информационное спонсорство

 
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности     Powered by Invision Power Board(R) 1.3 © 2003  IPS, Inc.