<?xml version="1.0" encoding="utf-8"?>
<feed xmlns="http://www.w3.org/2005/Atom">
	<title type="html"><![CDATA[Серый форум &mdash; VBS: Обработка ошибок при работе рекурсии]]></title>
	<link rel="self" href="https://forum.script-coding.com/extern.php?action=feed&amp;tid=9263&amp;type=atom" />
	<updated>2014-02-16T17:37:35Z</updated>
	<generator>PunBB</generator>
	<id>https://forum.script-coding.com/viewtopic.php?id=9263</id>
		<entry>
			<title type="html"><![CDATA[VBS: Обработка ошибок при работе рекурсии]]></title>
			<link rel="alternate" href="https://forum.script-coding.com/viewtopic.php?pid=80102#p80102" />
			<content type="html"><![CDATA[<p>Ранее в теме создал полноценно работающую рекурсию относительно определенного каталога. Но замел, что скрипт может &quot;отвалиться&quot; с ошибкой при появлении всевозможных ситуаций. Например:<br />1) Нет доступа к папке.<br />2) Есть проблемы при считывании имени файла (Спец символы которые могут встретится в наименовании вот нашел такое имя случайно ) </p><div class="codebox"><pre><code>Дыха?тельная систе?ма.txt</code></pre></div><br /><p>Может еще кто-то что-то может вспомнить.</p><p>Вопрос как можно обходить всевозможные такие проблемы?</p><p>В рекурсию включил дополнительно вывод в файл test.txt, что б обнаружить каталог или файл при котором произошла ошибка. Test1.txt - проверка данных в массиве. Вот сам код:</p><div class="codebox"><pre><code>Dim startFolder, Files(), RazmerMassivaFiles,i,SpisokIzMassiva

set FSO = CreateObject(&quot;Scripting.FileSystemObject&quot;)

&#039;Производим очистку если остались файлы прошлого запуска
If FSO.FileExists(&quot;D:\Test.txt&quot;) Then
FSO.DeleteFile &quot;D:\Test.txt&quot;, 0
End If

If FSO.FileExists(&quot;D:\Test1.txt&quot;) Then
FSO.DeleteFile &quot;D:\Test1.txt&quot;, 0
End If

&#039;Set TextStream = FSO.CreateTextFile(&quot;D:\Test.txt&quot;)
set OFile = FSO.OpenTextFile(&quot;D:\Test.txt&quot;, 8, True)

RazmerMassivaFiles = 0
reDim Files(RazmerMassivaFiles)

Files(RazmerMassivaFiles) = &quot;В данной структуре каталогов нет файлов&quot;

Set fso = CreateObject(&quot;Scripting.FileSystemObject&quot;)
startFolder = &quot;C:\Users\&quot;

CheckFolderInFolder startFolder

MsgBox &quot;Размер массива = &quot; &amp;RazmerMassivaFiles

&#039;Вывод значений массива
&#039;Set TextStream = FSO.CreateTextFile(&quot;D:\Test1.txt&quot;)
set OFile = FSO.OpenTextFile(&quot;D:\Test1.txt&quot;, 8, True)


For i=0 To RazmerMassivaFiles Step 1
    SpisokIzMassiva = SpisokIzMassiva + Files(i) +vbCrLf

    OFile.Write(Files(i) &amp; vbCrLf)

Next
MsgBox &quot;Готово файлы Test.txt и Test1.txt с данными находятся в директории D:\ &quot;
MsgBox SpisokIzMassiva

Function CheckFolderInFolder (AdresFolder)
    &#039;MsgBox AdresFolder
    Dim File
    Set Folder = FSO.GetFolder(AdresFolder)
    Set CollectionFolder = Folder.SubFolders
    Set CollectionFile = Folder.Files
    &#039;MsgBox CollectionFile.count
    If CollectionFile.count &gt; 0 Then
        For Each File In CollectionFile
            OFile.Write(AdresFolder &amp; vbCrLf)        
            OFile.Write(File.Path &amp; vbCrLf)
            Files(RazmerMassivaFiles) = File.Path
            &#039;MsgBox &quot;В массив Files(&quot;&amp;RazmerMassivaFiles &amp;&quot;) помещено значение = &quot; &amp;Files(RazmerMassivaFiles)
            RazmerMassivaFiles = RazmerMassivaFiles + 1
            reDim preserve Files(RazmerMassivaFiles)
            &#039;Files(RazmerMassivaFiles) = &quot;Пустое значение&quot;
            
        Next
    End If
    
    For Each SubFolder In CollectionFolder
        CheckFolderInFolder SubFolder
    Next

End Function


   </code></pre></div>]]></content>
			<author>
				<name><![CDATA[wildwolf007]]></name>
				<uri>https://forum.script-coding.com/profile.php?id=30994</uri>
			</author>
			<updated>2014-02-16T17:37:35Z</updated>
			<id>https://forum.script-coding.com/viewtopic.php?pid=80102#p80102</id>
		</entry>
</feed>
