Firebird процесс не может получить доступ к файлу
По заданию в курсовой необходимо написать программу шифрования двойной табличной перестановкой с использованием файлов, может конечно тут многое можно было гораздо проще сделать, но как додумался так сделал. Но вылезла ошибка с файлом. P.s. не знаю как записать строку в двумерный массив поэтому использовал файл для записи. P.p.s. вывод в файл еще не сделал но это не проблема.
Помогите решить проблему, ошибка:
Ошибка времени выполнения: System.IO.IOException: Процесс не может получить доступ к файлу "C:\Users\Павел\Desktop\КБ Информатика\Курсовая\Kurs.txt", так как этот файл используется другим процессом.
Стек:
в System.IO.__Error.WinIOError(Int32 errorCode, String maybeFullPath)
в System.IO.FileStream.Init(String path, FileMode mode, FileAccess access, Int32 rights, Boolean useRights, FileShare share, Int32 bufferSize, FileOptions options, SECURITY_ATTRIBUTES secAttrs, String msgPath, Boolean bFromProxy, Boolean useLongPath, Boolean checkHost)
в System.IO.FileStream..ctor(String path, FileMode mode, FileAccess access, FileShare share, Int32 bufferSize, FileOptions options, String msgPath, Boolean bFromProxy, Boolean useLongPath, Boolean checkHost)
в System.IO.StreamWriter.CreateFile(String path, Boolean append, Boolean checkHost)
в System.IO.StreamWriter..ctor(String path, Boolean append, Encoding encoding, Int32 bufferSize, Boolean checkHost)
в System.IO.StreamWriter..ctor(String path, Boolean append, Encoding encoding)
в PABCSystem.PABCSystem.Rewrite(Text f, Encoding en)
в PABCSystem.PABCSystem.Rewrite(Text f)
в Шифратор2.Program.$Main() в C:\Users\Павел\Desktop\КБ Информатика\Курсовая\Шифратор2.pas:строка 14
в Шифратор2.Program.Main()
Процесс не может получить доступ к файлу, так как этот файл используется другим процессом
Все работает, кроме записи результатов в файл. В разделе описания с файла все норм считывается, а.
Процесс не может получить доступ к файлу так как этот файл используется другим процессом
using System; using System.Collections.Generic; using System.Linq; using System.Text; using.
Процесс не может получить доступ к файлу, так как этот файл используется другим процессом
Моя программа должна добавлять на форму картинку, уменьшив ее до размеров 70х70, и скопировать ее.
Ну, вам так и написало - ваш файл ещё где то открыт, в другой программе. И та другая программа не даёт его перезаписать.
Лучше, через диспетчер задач посмотрите, не у всех процессов есть форма. И - попробуйте из папки удалить и пересоздать его.
Спасибо большое за старания конечно)
но это не та программа.
Шифрование двойной табличной перестановкой-это попарная смена местами сначала столбцов, а потом строк. А расшифровка-тоже самое в обратном порядке.
так в этом же случае тоже вылазиет такая ошибка, что мне с ней делать?
Добавлено через 7 минут
Я немного переделал программу, так логичнее, но тем не менее все равно вылазит та же ошибка:
Ошибка времени выполнения: System.IO.IOException: Процесс не может получить доступ к файлу "C:\Users\Павел\Desktop\КБ Информатика\Курсовая\Kurs.txt", так как этот файл используется другим процессом.
Стек:
в System.IO.__Error.WinIOError(Int32 errorCode, String maybeFullPath)
в System.IO.FileStream.Init(String path, FileMode mode, FileAccess access, Int32 rights, Boolean useRights, FileShare share, Int32 bufferSize, FileOptions options, SECURITY_ATTRIBUTES secAttrs, String msgPath, Boolean bFromProxy, Boolean useLongPath, Boolean checkHost)
в System.IO.FileStream..ctor(String path, FileMode mode, FileAccess access, FileShare share, Int32 bufferSize, FileOptions options, String msgPath, Boolean bFromProxy, Boolean useLongPath, Boolean checkHost)
в System.IO.StreamWriter.CreateFile(String path, Boolean append, Boolean checkHost)
в System.IO.StreamWriter..ctor(String path, Boolean append, Encoding encoding, Int32 bufferSize, Boolean checkHost)
в System.IO.StreamWriter..ctor(String path, Boolean append, Encoding encoding)
в PABCSystem.PABCSystem.Rewrite(Text f, Encoding en)
в PABCSystem.PABCSystem.Rewrite(Text f)
в Шифратор2.Program.$Main() в C:\Users\Павел\Desktop\КБ Информатика\Курсовая\Шифратор2.pas:строка 21
в Шифратор2.Program.Main()
Добавлено через 19 минут
Проблему с файлом решил, оказалось нельзя открывать на запись и на чтение одновременно, поэтому я открыл на чтение-прочитал-закрыл, открыл на запись-записал-закрыл.
Но не бросайте камнями)))) вылезла весьма странная ошибка, что индекс вышел за пределы массива, хотя вроде количество символов в файле совпадает с размерностью таблицы. Вот полное описание:
Ошибка времени выполнения: System.IndexOutOfRangeException: Индекс находился вне границ массива.
Стек:
в Шифратор2.Program.$Main() в C:\Users\Павел\Desktop\КБ Информатика\Курсовая\Шифратор2.pas:строка 28
в Шифратор2.Program.Main()
После подключения к базе с помощью программы IBExpert, при попытке приконнектиться к базе с помощью ibase_connect вылазиет ошибка:
Если в IBExpert разорвать соединение с базой - из php подключение удается.
Ребят, подскажите пожалуйста, как лечить?
Раньше я мог одновременно работать с базой и в IBExpert и из php. а теперь - нет
Помогите разобраться, пожалуйста.
ты бы хоть написал, что у тебя за сервер стоит. InterBase или Firebird и какой версии?
пока я вижу, что в %System% лежит gds32.dll от интербейза и в IBExpert прописан локальный путь коннекта. Если сервер на самом деле Firebird, то ошибка "unavailable database" вполне ожидаема. Для начала пропиши в IBExpert в св-вах алиаса Server = Remote, Server Name = localhost, Protocol = TCP/IP. И попробуй подключиться.
при этом, ibase_connect почему-то видит firebird.msg, возможно лезет к базе через файрбердовского клиента. У тебя случайно не запущены одновременно InterBase и Firebird на машине?
ЗЫ. такой зоопарк несовместимого наплодить ты сам разобрался, а исправлять последствия теперь других просишь?
dimitr писал(а): ЗЫ. такой зоопарк несовместимого наплодить ты сам разобрался, а исправлять последствия теперь других просишь?
Эх, в этом я виновен, правда поустанавливал многого не думая, лишь бы поскорее заработало. Виноват. Теперь не знаю как лечить.
кликни в трее по иконке Firebird-а, посмотри путь где он установлен. Найди там в подкаталоге /bin файл fbclient.dll, пропиши его в IBExpert-е вместо gds32.dll. Попробуй подключиться. Возможно, GDS32. - это как раз переименованный FB-шный клиент, раз он не требует наличия gds_db/tcp.
в таком случае остается всего один вариант - PHP лезет в базу через embedded-библиотеку, причем явно не от Firebird 2.5. Копай его параметры, тут я не помощник. Заставить все это работать можно двумя способами:
1) заменить у PHP коннект через fbembed.dll (она может называться и gds32.dll, но будет иметь размер больше мегабайта) на коннект через fbclient.dll, не забыв добавить к строку подключения имя хоста
2) переустановить Firebird в версии Classic вместо SuperServer, убедившись что PHP подключается через fbembed.dll версии не ниже 2.5
кстати, почему у тебя галка always capitalaize object names на странице коннекта к БД в IBE выключена? Сильно хочется геморроя с двойными кавычками? см. faq на сайте.
И чарсет коннекта к базе NONE, что тоже может иметь веселые последствия (если стольбцы в базе не в none).
Ребят, спасибо за советы.
Вчера и сегодня бился - не помогает пока ничего.
На сколько я понимаю, произошла путаница с этими dll. Все это возникло после того как я обновил firebird с 2.1 до 2.5. И не знаю что теперь блин делать. Все ваши советы попробовал.
Буду еще биться.
И уж совсем обнаглею: может у кого-нибудь найдется времечко по teamviewer глянуть? Уже руки опускаются. :-[
kdv, спасибо за советы.
а чего биться-то? делаешь поиск всех gds32.dll или fbclient.dll на компе. Все лишние, и не соответствующие fbclient.dll в папке от 2.5, удаляешь. Потом пускаешь instclient i -f gds (мог напутать, запусти instclient из bin FB25 в командной строке). Все.
Оххх.
В общем проблему решил так (методом тыка после ваших подсказок, естественно, за что огромное спасибо!):
Попробовал запустить две копии IBExpert, подключиться к одной и той же базе - и о, чудо! Оно заработало! Это натолкнуло на мысль какую-то, уже не помню ( ), и я полез в свой файл conf.php где заменил это:
на это:
$host = "F:\WebSerwer\home\expertd.ru\www\bases\backup.fdb";
Как прочитать лог-файл, если в это время он занят другим процессом
Здравствуйте. Пытаюсь делать Лог-файл и посчитать количество строк в файле. Вылетат ошибка мол этот.
Процесс не может получить доступ к файлу так как этот файл используется другим процессом
using System; using System.Collections.Generic; using System.Linq; using System.Text; using.
а зачем определять процесс программно? если есть диспетчер задач. ну или можно убить процесс непосредственно методом Kill()
ну или тут посмотри, там и процессы и всё, что хочешь
Программно, потому что этот процесс задействован в оперативной работе дежурных. Надо обновить базу данных в формате .gdb(firebird), затем она переписывается в рабочую базу данных в формате mysql. База данных может обновляться в любое время не один раз.
Я посмотрел в processExplorer, что базу "блокирует" fbserver.exe. Зная имя процесса, не трудно его удалить. Занятно, что удаляется блокирующий процесс и тут же рождается другой, который однако уже не блокирует.
Добавлено через 15 часов 5 минут
Удалить файл можно только после того, как "kill process".
Спасибо.
Решение
А программа должна запускать батник? Программа, должна останавливать сервер, а не запускать батники.
Столкнулся с странной проблемой. Если открыть БД в ibexpert, то при попытке подключиться к ней из другого приложения (excel)
выкидывает ошибку "File database is not found"
Проблема возникла недавно, до этого такого не наблюдалось.
p. s. если подключиться к бд, а потом попытаться открыть в ibexpert , то уже ibexpert говорит что:
Error while trying to open file.
Процесс не может получить доступ к файлу, так как этот файл занят другим процессом. .
Как определить, что открыта панель Персонализации и завершить её, если она открыта?
Я понимаю, что необходимо узнать Hendle окна. Но как узнать хэндл Панель управления\Все элементы.
Проблема IBExpert + Firebird 2.5.6 - запрос на 3 левых соединения вешает намертво
Собственно сабж. База - файл на моем компьютере без разницы ссд - хдд, Firebird 2.5.6.
Как открыть игру второй раз, если она уже открыта, если там стоит защита, от дублирования этой игры? PID поменять?
Если открыл игру, то второй раз её открыть, если она уже открыта - открыть нельзя, она напишет.
Переход на вкладку, если она уже открыта
Всем доброго времени суток. Есть сайт по сайту разбросаны ссылки на справку, клик на ссылку -.
Запретить открытие формы если она уже открыта
Из главной формы открываю еще одну форму кнопкой. При повторном нажатии вызывается повторно.
Запретить открывать форму с данными, если она уже открыта другими
Добрый день. Есть список с данными, нажимая 2 раза, открывается форма с этими детальными данными.
Не пересоздается директория QDir, если она открыта через файловый менеджер
Нужно удалить существующую директорию, если она есть и создать новую с тем же именем, т.е. очистить.
IBExpert, firebird
Создать вычисляемое поле F. F= Название месяца из даты xx.xx.xxxx. То есть нужно задать дату (номер.
IbExpert и FireBird
Ошибка "cannot perform operation - db is currently open". В чём может быть причина? private .
Функции FireBird\IBexpert
При выполнения простейшего SQL-запроса в IBexpert-е SELECT cast(round( cast(0.5 as.
Установка другого диапазона IP-адресов
Если не удалось решить конфликт DNS с помощью утилиты netsh, попробуйте использовать другой подход. По отзывам пользователей, проблема была разрешена после того, когда они установили совершенно другой диапазон IP-адресов вместо создания диапазона исключений. Этот способ подтвержден при разрешении конфликта между DNS и бухгалтерской программой Quickbooks.
В консоли командной строки с администраторскими правами запустите следующие команды:
- netsh int ipv4 set dynamicport tcp start=10000 num=1000
- netsh int ipv4 set dynamicport udp start=10000 num=1000
Если этот метод не применим к вашей ситуации, перейдите к следующему способу.
Причины ошибки
- Отсутствуют права администратора для запуска команды из консоли командной строки или PowerShell.
- Порт 80 или 443 используется другим процессом, что типично для компьютеров под управлением IIS (Internet Information Services).
- Неправильно настроен раздел реестра ListenOnlyList в оснастке IIS.
Разрешения конфликта портов IIS
- Параметр ListenOnlyList неправильно настроен на компьютере IIS.
- Другой процесс использует TCP-порт (80) или SSL-порт (443), требуемый IIS.
Для исправления ошибки сначала запустим утилиту Netstat.exe, чтобы определить, использует ли другой процесс указанные порты. Если они не заняты другим процессом, проверим раздел ListenOnlyList, правильно ли он настроен.
Откройте командную строку, предоставив ей доступ администратора, с помощью поисковой системы Windows. Для запуска утилиты Netstat.exe выполните команду:
При отображении результатов, прокрутите список активных подключений и проверьте, занятии ли порты 80и 443 другим процессом.
При их использовании отображаемая информация позволит определить причину ошибки. Для этого поищите в интернете конкретные шаги по разрешению конфликта в соответствии с PID-порта.
Если порты не используются, закройте командную строку и запустите Редактор реестра командой regedit из окна Win + R.
На левой панели навигации перейдите в следующее расположение:
Если по указанному пути ListenOnlyList отсутствует, не нужно его создавать, поскольку по умолчанию используется IP-адрес 0.0.0.0.
Снова откройте командную строку с правами администратора.
Чтобы продолжить операцию, введите «Y» и нажмите на Enter. После успешного завершения закройте консоль и вернитесь в редактора реестра.
Перейдите на правую панель раздела ListenOnlyList и убедитесь, что он содержит допустимые IP-адреса. При обнаружении недопустимых адресов, удалите их.
Если присутствует адрес 0.0.0.0, нужно удалить все остальные IP-адреса. После закройте редактор и перезагрузите ПК.
Попробуйте запустить службу из оснастки IIS MMC. После этого больше не должны сталкиваться с ошибкой, когда процессу не удается получить доступ к файлу, поскольку файл занят другим процессом.
Запуск команды с доступом администратора
Если не удается выполнить команду netsh, скорее всего, ошибка возникает из-за отсутствия прав администратора. В большинстве случаев это происходит, когда пользователь пытается запустить команду, которая добавляет исключения в динамический диапазон портов для собственных приложений Windows или сторонних программ. Имейте в виду, что эта операция требует доступа администратора. Чтобы предоставить его, выполните следующие шаги.
С помощью системного поиска найдите командную строку и запустите ее с правами администратора. Если отобразится запрос контроля учетных записей (UAC), подтвердите его нажатием на кнопку «Да».
В командной строке выполните еще раз команду и проверьте, не прерывается ли ее запуск ошибкой «Процесс не может получить доступ к файлу, так как этот файл занят другим процессом»
Решение
А потерять данные/базу, убивая процесс сервера, не боитесь? С точки зрения администрирования, правильней было бы сначала остановить сервер, а он уже сам "освободит" файл
Да, надо попробовать.
сделать .bat файл для оператора.
Добавлено через 3 часа 30 минут
Сделал остановку и перезапуск firebird server.
Но есть одна деталь, которую не смог преодолеть.
Запускать надо от имени администратора.
Написал инструкцию - Правой кнопкой на .bat файле и Запустить от имени админа. Это работает.
Но сделать это в программе - в коде запустить батник от имени админа не получилось, даже если программу запускает пользователь, вошедший на сервер под пользователем, имеющим админовские права.
Читайте также: