Форум программистов, компьютерный форум CyberForum.ru
Наши страницы

С++ для начинающих

Войти
Регистрация
Восстановить пароль
 
 
Chelioss
180 / 180 / 4
Регистрация: 08.01.2011
Сообщений: 1,133
#1

Программа не может открыть файл по полному пути - C++

26.04.2014, 21:18. Просмотров 767. Ответов 25
Метки нет (Все метки)

Есть проект в VS 2012, который работает с библиотекой OpenCV. В коде пишу полный путь к файлу. Все работает и файл открывается программой. Отключаю библиотеку(просто меняю название папки, в которой она находится) и добавляю нужные dll в папку с экзешником. Программа запускается, но файл она не открывает. Что не так?
0
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
26.04.2014, 21:18
Здравствуйте! Я подобрал для вас темы с ответами на вопрос Программа не может открыть файл по полному пути (C++):

Программа не может открыть текстовый файл - C++
Уважаемые форумчане, есть такой код #include "stdafx.h" #include <iostream> #include <fstream> #include <cstdlib> #include...

Программа, находящая папку по её полному "пути" и подсчитывающая количество файлов в ней - C++
Здравствуйте, вот код программы, а ошибка состоит в том, что программа не ищет папки или файлы по заданному пути, вместо этого она ищет...

Открыть файл по заданному пути - C++
Нужно, чтобы открывался файл, который, например, находится в C:\TEST#1 Подскажите, пожалуйста, как это сделать?

Не может открыть файл для чтения - C++
Почему-то после закрытия не открывается файл F2? На последнем шаге программы(99 строка) срабатывает проверка: if(!F2) { cout...

Программа вылетает при попытке открыть файл - C++
#include<iostream.h> #include<windows.h> #include<conio.h> #include<fstream.h> const int L=31; struct student{ char fam; char...

Программа, запущенная из автозагрузки, не может записать файл - C++
У меня такая проблема: Когда запускаю файл вручную логи пишутся в файл,когда с помощью автозагрузки в файл не пишется хотя сам процесс в...

Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
Croessmah
Эксперт CЭксперт С++
13221 / 7493 / 845
Регистрация: 27.09.2012
Сообщений: 18,413
Записей в блоге: 3
Завершенные тесты: 1
26.04.2014, 21:29 #2
попробуйте добавить файл в папку с проектом, если запускаете из IDE
1
Chelioss
180 / 180 / 4
Регистрация: 08.01.2011
Сообщений: 1,133
26.04.2014, 21:39  [ТС] #3
А какая разница. Будет другой путь, ну и что? Все равно не работает.
И мне надо без IDE.
0
alsav22
5419 / 4815 / 442
Регистрация: 04.06.2011
Сообщений: 13,587
27.04.2014, 01:11 #4
Цитата Сообщение от Chelioss Посмотреть сообщение
Программа запускается, но файл она не открывает. Что не так?
Пишите не полный путь к файлу, и положите файл рядом с .exe.
1
Chelioss
180 / 180 / 4
Регистрация: 08.01.2011
Сообщений: 1,133
27.04.2014, 02:49  [ТС] #5
Тоже не работает.
0
alsav22
5419 / 4815 / 442
Регистрация: 04.06.2011
Сообщений: 13,587
27.04.2014, 12:25 #6
Добавлено через 11 минут
Цитата Сообщение от Chelioss Посмотреть сообщение
Тоже не работает.
После того, как убрали полный путь в коде, проект пересобирали?

Добавлено через 18 минут
Цитата Сообщение от Chelioss Посмотреть сообщение
Отключаю библиотеку(просто меняю название папки, в которой она находится)
Отключаете от чего? Если этого не делать, а просто добавить dll в папку с exe, то работает?

Добавлено через 1 минуту
Цитата Сообщение от Chelioss Посмотреть сообщение
Программа запускается
Откуда запускаете? Из среды или из папки?

Добавлено через 11 минут
Сейчас проверил. И с полным путём, и с не полным путём всё работает. Что-то не так делаете. Переименование папки с библиотекой вообще никак не должно влиять на запуск, собранного exe, из папки.
1
Chelioss
180 / 180 / 4
Регистрация: 08.01.2011
Сообщений: 1,133
27.04.2014, 14:00  [ТС] #7
Цитата Сообщение от alsav22 Посмотреть сообщение
После того, как убрали полный путь в коде, проект пересобирали?
да
Цитата Сообщение от alsav22 Посмотреть сообщение
Отключаете от чего? Если этого не делать, а просто добавить dll в папку с exe, то работает?
Эзешнику нужны dll, которые лежат в папке с
Цитата Сообщение от alsav22 Посмотреть сообщение
Переименование папки с библиотекой вообще никак не должно влиять на запуск, собранного exe, из папки.
библиотекой. Если папку переименовать, то программа ругается на то, что отсутствует dll. Мне нужен скинуть программу человеку, но чтобы ему не пришлось ставить эту библиотеку. Если добавить dll к экзешнику в папку, то прога работает, но не открывает файл.
Цитата Сообщение от alsav22 Посмотреть сообщение
Откуда запускаете? Из среды или из папки?
И так и так не работает.
А я говорил, что влияет? Прога запускается, но файл она не открывает. Если библиотеку не трогать, то файл открывается, если библиотеку переименовать, то файл не открывает. Фокус.
0
alsav22
5419 / 4815 / 442
Регистрация: 04.06.2011
Сообщений: 13,587
27.04.2014, 14:16 #8
Цитата Сообщение от Chelioss Посмотреть сообщение
И так и так не работает.
У меня всё работает, у вас не работает. Переименование папки должно влиять, только на сборку проекта. Возможные причины этого фокуса: далаете много дейстий одновременно ("и так, и так"), поэтому отследить, что на что влияет, трудно. Предлагаю такой порядок действий. Убрать в коде полный путь к файлу, файл поместить и в папку проекта, и в папку с exe (что, кстати, собираете? Release или Debug?). Папку с библиотекой не переименовывать. Сделать очистить, перестроить (именно, перестроить: F7 + Ctrl + Alt). Из студии не запускать. Зайти в папку проекта и посмотреть, чтобы время изменения exe совпадало с временем перестройки. Запустить exe из папки. Если будет работать, то переименовать папку (чисто для проверки), и опять запустить exe из папки.
1
Chelioss
180 / 180 / 4
Регистрация: 08.01.2011
Сообщений: 1,133
27.04.2014, 15:29  [ТС] #9
Цитата Сообщение от alsav22 Посмотреть сообщение
Переименование папки должно влиять, только на сборку проекта.
В папку с библиотекой лежат dll, которые требуются для работы программы, а не только для ее сборки. Хотя я и не вижу связи между dll и путем к файлу.
Цитата Сообщение от alsav22 Посмотреть сообщение
что, кстати, собираете? Release или Debug?
Debug
Цитата Сообщение от alsav22 Посмотреть сообщение
Если будет работать, то переименовать папку (чисто для проверки), и опять запустить exe из папки.
Тоже самое. Не работает.

Все таки додумался в чем проблема. Проблема в DLL. EXE просил только 3 dll, но этого не хватало для открытия файлов. Я добавил все dll из библиотеки в папку с exe и заработало.
0
alsav22
5419 / 4815 / 442
Регистрация: 04.06.2011
Сообщений: 13,587
27.04.2014, 15:36 #10
Цитата Сообщение от Chelioss Посмотреть сообщение
Я добавил все dll из библиотеки в папку с exe и заработало.
Я сразу все добавлял, поэтому у меня и работало. Непоятно только, как переименование папки на это влияло? Путь к dll где-то в path прописан?
0
Chelioss
180 / 180 / 4
Регистрация: 08.01.2011
Сообщений: 1,133
27.04.2014, 15:41  [ТС] #11
Цитата Сообщение от alsav22 Посмотреть сообщение
Я сразу все добавлял, поэтому у меня и работало. Непоятно только, как переименование папки на это влияло? Путь к dll где-то в path прописан?
Путь к dll наверно зашит в exe.
Для открытия файла прога использует одну dll, которая есть в папке библиотекой, но нет в папке с exe. Т.е. прога запускается без этой dll, но открыть не может. Если закрыть доступ к библиотеке, то проге не хватает этой dll. Добавил эту dll в папке с exe и теперь файл открывается.
0
alsav22
5419 / 4815 / 442
Регистрация: 04.06.2011
Сообщений: 13,587
27.04.2014, 15:51 #12
Цитата Сообщение от Chelioss Посмотреть сообщение
Путь к dll наверно зашит в exe.
Нет, так не бывает. При создании dll никто не знает, где будет находиться папака с dll. Если нужная dll не находится рядом с exe, то она ищется в path. А раз у вас без всех dll, но без изменеия папки, работало, то значит где-то, что-то прописано.
0
Chelioss
180 / 180 / 4
Регистрация: 08.01.2011
Сообщений: 1,133
27.04.2014, 16:02  [ТС] #13
Цитата Сообщение от alsav22 Посмотреть сообщение
Нет, так не бывает. При создании dll никто не знает, где будет находиться папака с dll. Если нужная dll не находится рядом с exe, то она ищется в path. А раз у вас без всех dll, но без изменеия папки, работало, то значит где-то, что-то прописано.
Да, прописано в свойствах проекта, а потом после компиляции и в exe. Вроде так. Я про создание dll не говорил.
0
alsav22
5419 / 4815 / 442
Регистрация: 04.06.2011
Сообщений: 13,587
27.04.2014, 16:14 #14
Цитата Сообщение от Chelioss Посмотреть сообщение
Я про создание dll не говорил.
Да, это я не то написал, прошу прощения.
Цитата Сообщение от Chelioss Посмотреть сообщение
Да, прописано в свойствах проекта
Вы, в свойствах проекта, прописывали путь к dll?
Цитата Сообщение от Chelioss Посмотреть сообщение
а потом после компиляции и в exe. Вроде так.
Цитата Сообщение от Chelioss Посмотреть сообщение
Путь к dll наверно зашит в exe.
Тогда без любых dll, в папке с exe, работало бы. Однако не работает, значит никаких путей к dll в exe нет.
0
Chelioss
180 / 180 / 4
Регистрация: 08.01.2011
Сообщений: 1,133
27.04.2014, 16:19  [ТС] #15
Цитата Сообщение от alsav22 Посмотреть сообщение
Вы, в свойствах проекта, прописывали путь к dll?
Путь к папке, в которой лежат dll.
Цитата Сообщение от alsav22 Посмотреть сообщение
Тогда без любых dll, в папке с exe, работало бы. Однако не работает, значит никаких путей к dll в exe нет.
Работает, если не трогать библиотеку. Если изменить название папки библиотеки, то зашитый путь в exe становится бесполезным и он ищет dll в папке, в которой он находится.
0
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
27.04.2014, 16:19
Привет! Вот еще темы с ответами:

Как сделать так, чтобы программа брала файл не по полному пути, а из собственной папки? - Delphi
У меня есть Ole контейнер, и CheckBox К ним код: procedure TForm1.ComboBox1Change(Sender: TObject); var fullFileName : string; ...

Программа не может открыть свой файл - C#
Здравствуйте.Покликал по системе теперь при нажатии на файл открывается моя программа.Как сделать чтобы содержимое файла было показано в...

Программа создает файл, который не может открыть microsoft office (абсолютно безвредна) - Turbo Pascal
Вроде бы простенькая прога. var b:integer; begin assign(input,'input.txt'); reset(input); assign(output,'output.txt'); ...

При использовании функции fgets () и вводе абсолютно правильного имени файла программа не может открыть файл - C (СИ)
Прошу прощение за беспокойство и за глупый вопрос, но вoобщем проблема такая: Программа определяет существует ли в текущей директории...


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
Yandex
Объявления
27.04.2014, 16:19
Ответ Создать тему
Опции темы

КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2017, vBulletin Solutions, Inc.
Рейтинг@Mail.ru