|
3073 / 1411 / 425
Регистрация: 19.01.2009
Сообщений: 3,893
|
||||||
Функции rename() и remove()17.07.2009, 14:43. Показов 7283. Ответов 13
Метки нет (Все метки)
Есть код под FreeBSD компилиться и выполняется на ура. Хочу его портировать под винду. Прога полностью на ANSI C с использованием стандартной библиотеки, по идее, проблем быть не должно. Но, иногда эти две функции возвращают ошибку (-1). Причем, проблема плавающая - воспроизвести у меня ее не получается.
Причем, когда происходит сбой, переменные, передаваемые этим функциям 100% валидные - проверено. сам код приводить не буду, т.к. достаточно большая функция (~300 строк), но могу описать, что эта функция делает.
Проверено на MSVC 6.0 - ошибка проявляется и если я в exeшник добавляю RTL, так и если я линкую через msvcrt.dll. может для винды обязателно нужно чтобы файлы придерживались спецификации 8.3 , а то у этих файлов расширения 4-х символьные (ex: file.conf ). Но почему тогда функция иногда работает нормально. А под FreeBSD вообще проблем нет - крутиться ввиде демона и не каких проблем. Может кто встречался с подобной проблемой?
0
|
||||||
| 17.07.2009, 14:43 | |
|
Ответы с готовыми решениями:
13
Реализовать функции: mktemp, remove, rename, setmode, fileleght
Реализовать аппликативный оператор MY-REMOVE-IF с интерфейсом и семантикой, аналогично стандартному REMOVE-IF |
|
Заблокирован
|
|
| 17.07.2009, 14:48 | |
|
эти функции расчитаны на работу с 1-м файлом или одним каталогом, мож ты каталог с файликами хош переименовать тогда ничё не выйдет, вот...
1
|
|
|
|
|
| 17.07.2009, 14:54 | |
|
В тех случаях, когда функции вызывают ошибку, распечатай errno, а дальше по документации смотри, что произошло
Добавлено через 44 секунды При этом если в процессе создания файла ты его ещё и блокнотом открывал, то по именно по этой причине файл не сможет удалиться под виндами
1
|
|
|
7176 / 3234 / 82
Регистрация: 17.06.2009
Сообщений: 14,164
|
|
| 17.07.2009, 15:08 | |
|
2polivets: ты выложи код и скажи чем под Windows компилируешь.
А так это больше похоже на гадание на кофейной гуще ... Добавлено через 2 минуты 13 секунд Разглядел - компилируешь MSVC 6.0 Вообще говоря староват компилятор. Ты его патчил ? Какой у него service pack ?
1
|
|
|
3073 / 1411 / 425
Регистрация: 19.01.2009
Сообщений: 3,893
|
|||
| 17.07.2009, 15:08 [ТС] | |||
0
|
|||
|
|
|
| 17.07.2009, 15:13 | |
|
Точно файл на стороне не открываешь? Ну и 300 строк - не так уж и много, может выложишь код (надеюсь, это не секретная военная разработка)?
Добавлено через 1 минуту 53 секунды И ещё. Сбоит при работе с одними и теми же путями до файлов?
1
|
|
|
3073 / 1411 / 425
Регистрация: 19.01.2009
Сообщений: 3,893
|
|||
| 17.07.2009, 15:23 [ТС] | |||
|
Думаю, нужно на WinAPI переписывать
![]()
Может компилер??? Отпишишусь чуть позже. Добавлено через 3 минуты 21 секунду Да, что и странно. Я специальную обвязку сделал, если сбой, то данные пишем в лог. Все проверено. Вот я грешу то на RTL, то msvcrt.dll, то на MSVC 6.0. Конечно староват...
0
|
|||
|
537 / 459 / 3
Регистрация: 08.07.2009
Сообщений: 2,625
|
|
| 17.07.2009, 17:23 | |
|
По идее, пути к файлу под Linux и под виндой отличиются. Может также оно не успело сделать предыдущее действие: попробуй вставить Sleep(200) между 5, 6 и 7 действиями.
0
|
|
|
7176 / 3234 / 82
Регистрация: 17.06.2009
Сообщений: 14,164
|
||
| 17.07.2009, 17:41 | ||
А то еще какие ошибки найдешь ![]() Добавлено через 10 минут 8 секунд В Windows есть приколы. Некоторые операции реально выполняются не сразу, а с задержкой. Причем задержка зависит от непонятных вещей. Например если сильно загрузить компьютер, то файл может реально удаляться чуть ли не минуту. Поэтому предлагаю сделай так: rename(_путь_к_1-му_файлу, временное_имя_для_1-го_файла); rename(_путь_к_2-му_файлу, _путь_к_1-му_файлу); remove(временное_имя_для_1-го_файла) Или иначе - при ошибке удаления нужно подождать немного и еще раз повторить удаление. Причем повторов должен быть не один. Как я уже говорил - если сильно прогрузить систему, то операции выполняются отложенно.
0
|
||
|
7176 / 3234 / 82
Регистрация: 17.06.2009
Сообщений: 14,164
|
|
| 17.07.2009, 19:42 | |
|
Да не нужно никакой травки. Нужно просто сильно прогрузить процессор. Если процессор одноядерный, то вообще легко. Двухядерный труднее. Если есть установленный и работающий антивирус - легче, так как он сам грузит систему.
Безо всякого программирования очень часто на медленных компьютерах наблюдаю следующее: Создаю каталог: program1/ Кладу туда setup.exe Запускаю setup.exe Устанавливаю программу. Инсталлятор уже отработал - программа установилась. Сразу же пытаюсь удалить setup.exe или весь каталог program1/. Не дает удалить - чем-то залочено. Ладно - подождал 5 сек. Все удалилось. Бывает что 5 сек недостаточно.
0
|
|
|
3073 / 1411 / 425
Регистрация: 19.01.2009
Сообщений: 3,893
|
||
| 17.07.2009, 19:44 [ТС] | ||
|
Всем огромное спасибо!
Бага пропала после перекомпиляции в VC2005. По крайней мере, уже 3 часа безсбойной работы. По предыдущим наблюдениям, она должна проявиться как минимум раза два (сразу скажу, что memory leak'ов нету). Но это не очень радует, т.к. проект компилировать нужно в VC6.0 поэтому скорее всего для виндового проекта нужно будет всю файловую подсистему на WinAPI переписовать... черт, так хотелось сохранить переносимость ядра программы, но...
A sleep() и подобные функции: во-первых не помогло во-вторых неприемлемо, т.к. функция вызывается достаточно часто, что влияет на производительность и получается в зависимости от аппаратуры компа, на котором хостится прога, нужно будет подбирать интервал задержки - это тормоз и еще раз тормоз. Придеться курить MSDN, Win32SDK и тому подобные рульные книжки ![]() Еще раз всем огромное спасибо - тема закрыта.
0
|
||
|
537 / 459 / 3
Регистрация: 08.07.2009
Сообщений: 2,625
|
||
| 17.07.2009, 19:46 | ||
|
0
|
||
|
|
||
| 18.07.2009, 00:58 | ||
|
0
|
||
| 18.07.2009, 00:58 | |
|
Помогаю со студенческими работами здесь
14
Как помощью функции Remove удалить все 0 rename Copyfile and rename Искать еще темы с ответами Или воспользуйтесь поиском по форуму: |
|
Новые блоги и статьи
|
||||
|
Thinkpad X220 Tablet — это лучший бюджетный ноутбук для учёбы, точка.
Programma_Boinc 23.12.2025
Thinkpad X220 Tablet — это лучший бюджетный ноутбук для учёбы, точка.
Рецензия / Мнение/ Перевод
https:/ / **********/ gallery/ thinkpad-x220-tablet-porn-gzoEAjs
. . .
|
PhpStorm 2025.3: WSL Terminal всегда стартует в ~
and_y87 14.12.2025
PhpStorm 2025. 3: WSL Terminal всегда стартует в ~ (home), игнорируя директорию проекта
Симптом:
После обновления до PhpStorm 2025. 3 встроенный терминал WSL открывается в домашней директории. . .
|
Как объединить две одинаковые БД Access с разными данными
VikBal 11.12.2025
Помогите пожалуйста !! Как объединить 2 одинаковые БД Access с разными данными.
|
Новый ноутбук
volvo 07.12.2025
Всем привет.
По скидке в "черную пятницу" взял себе новый ноутбук Lenovo ThinkBook 16 G7 на Амазоне:
Ryzen 5 7533HS
64 Gb DDR5
1Tb NVMe
16" Full HD Display
Win11 Pro
|
Музыка, написанная Искусственным Интеллектом
volvo 04.12.2025
Всем привет. Некоторое время назад меня заинтересовало, что уже умеет ИИ в плане написания музыки для песен, и, собственно, исполнения этих самых песен. Стихов у нас много, уже вышли 4 книги, еще 3. . .
|
|
От async/await к виртуальным потокам в Python
IndentationError 23.11.2025
Армин Ронахер поставил под сомнение async/ await. Создатель Flask заявляет: цветные функции - провал, виртуальные потоки - решение. Не threading-динозавры, а новое поколение лёгких потоков. Откат?. . .
|
Поиск "дружественных имён" СОМ портов
Argus19 22.11.2025
Поиск "дружественных имён" СОМ портов
На странице:
https:/ / norseev. ru/ 2018/ 01/ 04/ comportlist_windows/
нашёл схожую тему. Там приведён код на С++, который показывает только имена СОМ портов, типа,. . .
|
Сколько Государство потратило денег на меня, обеспечивая инсулином.
Programma_Boinc 20.11.2025
Сколько Государство потратило денег на меня, обеспечивая инсулином.
Вот решила сделать интересный приблизительный подсчет, сколько государство потратило на меня денег на покупку инсулинов.
. . .
|
Ломающие изменения в C#.NStar Alpha
Etyuhibosecyu 20.11.2025
Уже можно не только тестировать, но и пользоваться C#. NStar - писать оконные приложения, содержащие надписи, кнопки, текстовые поля и даже изображения, например, моя игра "Три в ряд" написана на этом. . .
|
Мысли в слух
kumehtar 18.11.2025
Кстати, совсем недавно имел разговор на тему медитаций с людьми. И обнаружил, что они вообще не понимают что такое медитация и зачем она нужна. Самые базовые вещи. Для них это - когда просто люди. . .
|