Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

[FP] Не видит удаление временного файла #3328

Open
BityutskiyNA opened this issue Jul 23, 2024 · 4 comments
Open
Labels
type/FP False positive

Comments

@BityutskiyNA
Copy link

Диагностика

Нужно добавить удаление временного файла после использования
MissingTemporaryFileDeletion

Версия

1.14.

Описание ложного срабатывания диагностики

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

Пример кода

Если ДождатьсяЗавершения Тогда 
	Если ПолучитьПотокВывода Тогда 
		ИмяФайлаПотокаВывода = ПолучитьИмяВременногоФайла("stdout.tmp");
		СтрокаКоманды = СтрокаКоманды + " > """ + ИмяФайлаПотокаВывода + """";
	КонецЕсли;
	
	Если ПолучитьПотокОшибок Тогда 
		ИмяВременногоФайлаПотокаОшибок = ПолучитьИмяВременногоФайла("stderr.tmp");
		СтрокаКоманды = СтрокаКоманды + " 2>""" + ИмяВременногоФайлаПотокаОшибок + """";
	КонецЕсли;
КонецЕсли;

Если КодировкаПотоков = Неопределено Тогда 
	КодировкаПотоков = КодировкаСтандартныхПотоков();
КонецЕсли;

КодВозврата = Неопределено;

Если ОбщегоНазначения.ЭтоWindowsСервер() Тогда
	
	ИмяФайлаКоманды = ПолучитьИмяВременногоФайла("run.bat");
	ТекстовыйДокумент = РаботаСФайламиСлужебныйКлиентСервер.НовыйФайлЗапускаКомандыWindows(
		СтрокаКоманды, ТекущийКаталог, ДождатьсяЗавершения, КодировкаИсполнения);
	ТекстовыйДокумент.Записать(ИмяФайлаКоманды, КодировкаПотоков);
	
	Если ОбщегоНазначения.ИнформационнаяБазаФайловая() Тогда
		// В файловой информационной базе показывать окно консоли не следует и в серверном контексте.
		Оболочка = Новый COMОбъект("Wscript.Shell");
		КодВозврата = Оболочка.Run(ИмяФайлаКоманды, 0, ДождатьсяЗавершения);
		Оболочка = Неопределено;
	Иначе 
		ЗапуститьПриложение(ИмяФайлаКоманды,, ДождатьсяЗавершения, КодВозврата);
	КонецЕсли;
	
	Если ДождатьсяЗавершения Тогда
		// Автоматически удаление включено только в случае не ожидания завершения, т.к. код возврата там не интересен.
		// В случае, когда нужен корректный код возврата автоматического удаления нет, потому следует удалить файл здесь.
		УдалитьВременныйФайл(ИмяФайлаКоманды);
	КонецЕсли;
Иначе
	ЗапуститьПриложение(СтрокаКоманды, ТекущийКаталог, ДождатьсяЗавершения, КодВозврата);
КонецЕсли;

ПотокВывода = "";
ПотокОшибок = "";

Если ДождатьсяЗавершения Тогда 
	Если ПолучитьПотокВывода Тогда
		ПотокВывода = ПрочитатьФайлЕслиСуществует(ИмяФайлаПотокаВывода, КодировкаПотоков);
		УдалитьВременныйФайл(ИмяФайлаПотокаВывода);
	КонецЕсли;
	
	Если ПолучитьПотокОшибок Тогда 
		ПотокОшибок = ПрочитатьФайлЕслиСуществует(ИмяВременногоФайлаПотокаОшибок, КодировкаПотоков);
		УдалитьВременныйФайл(ИмяВременногоФайлаПотокаОшибок);
	КонецЕсли;
КонецЕсли;

Скриншоты

сонар скрин

Дополнительная информация

@BityutskiyNA BityutskiyNA added the type/FP False positive label Jul 23, 2024
@nixel2007
Copy link
Member

А сколько срабатываний суммарно в этом куске кода у вас? Два или три?

@BityutskiyNA
Copy link
Author

А сколько срабатываний суммарно в этом куске кода у вас? Два или три?

Два.
image

@theshadowco
Copy link
Member

А если переменную ИмяВременногоФайлаПотокаОшибок определить до первого условия во вложенном условии? Сейчас она, по сути, локальная для блока условия

@BityutskiyNA
Copy link
Author

А если переменную ИмяВременногоФайлаПотокаОшибок определить до первого условия во вложенном условии? Сейчас она, по сути, локальная для блока условия

Не исправило ситуацию.

image

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
type/FP False positive
Projects
None yet
Development

No branches or pull requests

3 participants