Π§ΠΈΡ‚Π°ΠΉΡ‚Π΅ ΠΊΠ½ΠΈΠ³ΠΈ ΠΎΠ½Π»Π°ΠΉΠ½ Π½Π° Bookidrom.ru! БСсплатныС ΠΊΠ½ΠΈΠ³ΠΈ Π² ΠΎΠ΄Π½ΠΎΠΌ ΠΊΠ»ΠΈΠΊΠ΅

Π§ΠΈΡ‚Π°Ρ‚ΡŒ ΠΎΠ½Π»Π°ΠΉΠ½ «БистСмноС ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΠΈΡ€ΠΎΠ²Π°Π½ΠΈΠ΅ Π² срСдС WindowsΒ». Π‘Ρ‚Ρ€Π°Π½ΠΈΡ†Π° 23

Автор ДТонсон Π₯Π°Ρ€Ρ‚

Ѐункция GetTempFileName прСдоставляСт ΡƒΠ½ΠΈΠΊΠ°Π»ΡŒΠ½ΠΎΠ΅ имя Ρ„Π°ΠΉΠ»Π° с Ρ€Π°ΡΡˆΠΈΡ€Π΅Π½ΠΈΠ΅ΠΌ .tmp, ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΡ ΡƒΠΊΠ°Π·Π°Π½Π½Ρ‹ΠΉ ΠΏΡƒΡ‚ΡŒ доступа, ΠΈ ΠΏΡ€ΠΈ нСобходимости создаСт Ρ„Π°ΠΉΠ». Π­Ρ‚Π° функция ΡˆΠΈΡ€ΠΎΠΊΠΎ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΠ΅Ρ‚ΡΡ Π² рядС ΡΠ»Π΅Π΄ΡƒΡŽΡ‰ΠΈΡ… ΠΏΡ€ΠΈΠΌΠ΅Ρ€ΠΎΠ² (ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΠ° 6.1, ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΠ° 7.1 ΠΈ Π΄Ρ€ΡƒΠ³ΠΈΠ΅). 

UINT GetTempFileName(LPCTSTR lpPathName, LPCTSTR lpPrefixString, UINT uUnique, LPTSTR lpTempFileName)

Π’ΠΎΠ·Π²Ρ€Π°Ρ‰Π°Π΅ΠΌΠΎΠ΅ Π·Π½Π°Ρ‡Π΅Π½ΠΈΠ΅: ΡƒΠ½ΠΈΠΊΠ°Π»ΡŒΠ½ΠΎΠ΅ числовоС Π·Π½Π°Ρ‡Π΅Π½ΠΈΠ΅, ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΠ΅ΠΌΠΎΠ΅ для создания ΠΈΠΌΠ΅Π½ΠΈ Ρ„Π°ΠΉΠ»Π°. Π­Ρ‚ΠΈΠΌ Π·Π½Π°Ρ‡Π΅Π½ΠΈΠ΅ΠΌ Π±ΡƒΠ΄Π΅Ρ‚ Π·Π½Π°Ρ‡Π΅Π½ΠΈΠ΅ ΠΏΠ°Ρ€Π°ΠΌΠ΅Ρ‚Ρ€Π° uUnique, Ссли ΠΏΡ€ΠΈ Π²Ρ‹Π·ΠΎΠ²Π΅ Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΈ ΠΎΠ½ΠΎ Π±Ρ‹Π»ΠΎ Π·Π°Π΄Π°Π½ΠΎ Π½Π΅Π½ΡƒΠ»Π΅Π²Ρ‹ΠΌ. Π’ случаС Π½Π΅ΡƒΠ΄Π°Ρ‡Π½ΠΎΠ³ΠΎ Π·Π°Π²Π΅Ρ€ΡˆΠ΅Π½ΠΈΡ Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΈ Π²ΠΎΠ·Π²Ρ€Π°Ρ‰Π°Π΅ΠΌΠΎΠ΅ Π·Π½Π°Ρ‡Π΅Π½ΠΈΠ΅ Ρ€Π°Π²Π½ΠΎ Π½ΡƒΠ»ΡŽ. 

ΠŸΠ°Ρ€Π°ΠΌΠ΅Ρ‚Ρ€Ρ‹

lpPathName β€” ΠΊΠ°Ρ‚Π°Π»ΠΎΠ³, Π² ΠΊΠΎΡ‚ΠΎΡ€ΠΎΠΌ размСщаСтся Π²Ρ€Π΅ΠΌΠ΅Π½Π½Ρ‹ΠΉ Ρ„Π°ΠΉΠ». Π’ΠΈΠΏΠΈΡ‡Π½Ρ‹ΠΌ Π·Π½Π°Ρ‡Π΅Π½ΠΈΠ΅ΠΌ этого ΠΏΠ°Ρ€Π°ΠΌΠ΅Ρ‚Ρ€Π° являСтся строка ".", ΡƒΠΊΠ°Π·Ρ‹Π²Π°ΡŽΡ‰Π°Ρ Π½Π° Ρ‚Π΅ΠΊΡƒΡ‰ΠΈΠΉ ΠΊΠ°Ρ‚Π°Π»ΠΎΠ³. Π’ Π΄Ρ€ΡƒΠ³ΠΈΡ… случаях ΠΌΠΎΠΆΠ½ΠΎ Π²ΠΎΡΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚ΡŒΡΡ Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠ΅ΠΉ Windows GetTempPath, которая прСдоставляСт имя ΠΊΠ°Ρ‚Π°Π»ΠΎΠ³Π°, ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΠ΅ΠΌΠΎΠ³ΠΎ для хранСния Π²Ρ€Π΅ΠΌΠ΅Π½Π½Ρ‹Ρ… Ρ„Π°ΠΉΠ»ΠΎΠ², Π½ΠΎ Π½Π°ΠΌΠΈ здСсь Π½Π΅ рассматриваСтся.

lpPrefixString β€” прСфикс, ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΠ΅ΠΌΡ‹ΠΉ Π² ΠΈΠΌΠ΅Π½ΠΈ Π²Ρ€Π΅ΠΌΠ΅Π½Π½ΠΎΠ³ΠΎ Ρ„Π°ΠΉΠ»Π°. Π”ΠΎΠΏΡƒΡΠΊΠ°ΡŽΡ‚ΡΡ лишь 8-Π±ΠΈΡ‚ΠΎΠ²Ρ‹Π΅ символы ASCII. Π—Π½Π°Ρ‡Π΅Π½ΠΈΠ΅ ΠΏΠ°Ρ€Π°ΠΌΠ΅Ρ‚Ρ€Π° uUnique ΠΎΠ±Ρ‹Ρ‡Π½ΠΎ устанавливаСтся Ρ€Π°Π²Π½Ρ‹ΠΌ Π½ΡƒΠ»ΡŽ, Ρ‡Ρ‚ΠΎΠ±Ρ‹ функция ΡΠ°ΠΌΠΎΡΡ‚ΠΎΡΡ‚Π΅Π»ΡŒΠ½ΠΎ сгСнСрировала ΡƒΠ½ΠΈΠΊΠ°Π»ΡŒΠ½Ρ‹ΠΉ чСтырСхразрядный прСфикс ΠΈ использовала Π΅Π³ΠΎ Π² ΠΈΠΌΠ΅Π½ΠΈ создаваСмого Ρ„Π°ΠΉΠ»Π°. ΠŸΡ€ΠΈ Π½Π΅Π½ΡƒΠ»Π΅Π²ΠΎΠΌ Π·Π½Π°Ρ‡Π΅Π½ΠΈΠΈ этого ΠΏΠ°Ρ€Π°ΠΌΠ΅Ρ‚Ρ€Π° Ρ„Π°ΠΉΠ» Π½Π΅ создаСтся, Ρ‚Π°ΠΊ Ρ‡Ρ‚ΠΎ это Π½Π΅ΠΎΠ±Ρ…ΠΎΠ΄ΠΈΠΌΠΎ ΡΠ΄Π΅Π»Π°Ρ‚ΡŒ ΠΎΡ‚Π΄Π΅Π»ΡŒΠ½ΠΎ ΠΏΡ€ΠΈ ΠΏΠΎΠΌΠΎΡ‰ΠΈ Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΈ CreateFile, Π²ΠΎΠ·ΠΌΠΎΠΆΠ½ΠΎ β€” с использованиСм Ρ„Π»Π°Π³Π° FILE_FLAG_DELETE_ON_CLOSE. 

lpTempFileName β€” ΡƒΠΊΠ°Π·Π°Ρ‚Π΅Π»ΡŒ Π½Π° Π±ΡƒΡ„Π΅Ρ€, ΠΏΡ€Π΅Π΄Π½Π°Π·Π½Π°Ρ‡Π΅Π½Π½Ρ‹ΠΉ для хранСния ΠΈΠΌΠ΅Π½ΠΈ Π²Ρ€Π΅ΠΌΠ΅Π½Π½ΠΎΠ³ΠΎ Ρ„Π°ΠΉΠ»Π°. Π Π°Π·ΠΌΠ΅Ρ€ Π±ΡƒΡ„Π΅Ρ€Π°, Π²Ρ‹Ρ€Π°ΠΆΠ΅Π½Π½Ρ‹ΠΉ Π² Π±Π°ΠΉΡ‚Π°Ρ…, Π΄ΠΎΠ»ΠΆΠ΅Π½ Π±Ρ‹Ρ‚ΡŒ Π½Π΅ ΠΌΠ΅Π½Π΅Π΅ МАΠ₯РАВН. Π Π΅Π·ΡƒΠ»ΡŒΡ‚ΠΈΡ€ΡƒΡŽΡ‰Π΅Π΅ ΠΏΠΎΠ»Π½ΠΎΠ΅ имя Ρ„Π°ΠΉΠ»Π° получаСтся объСдинСниСм строк, ΡΠΎΠΎΡ‚Π²Π΅Ρ‚ΡΡ‚Π²ΡƒΡŽΡ‰ΠΈΡ… ΠΏΡƒΡ‚ΠΈ доступа ΠΊ Ρ„Π°ΠΉΠ»Ρƒ, прСфикса, чСтырСхразрядного ΡˆΠ΅ΡΡ‚Π½Π°Π΄Ρ†Π°Ρ‚Π΅Ρ€ΠΈΡ‡Π½ΠΎΠ³ΠΎ числа ΠΈ суффикса .tmp.

Π’ΠΎΡ‡ΠΊΠΈ монтирования

NT 5.0 Ρ€Π°Π·Ρ€Π΅ΡˆΠ°Π΅Ρ‚ ΠΌΠΎΠ½Ρ‚ΠΈΡ€ΠΎΠ²Π°Π½ΠΈΠ΅ (ΠΈΠ»ΠΈ ΠΏΠΎΠ΄ΠΊΠ»ΡŽΡ‡Π΅Π½ΠΈΠ΅) ΠΎΠ΄Π½ΠΎΠΉ Ρ„Π°ΠΉΠ»ΠΎΠ²ΠΎΠΉ систСмы Π² Ρ‚ΠΎΡ‡ΠΊΠ΅ монтирования, находящСйся Π² Π΄Ρ€ΡƒΠ³ΠΎΠΉ Ρ„Π°ΠΉΠ»ΠΎΠ²ΠΎΠΉ систСмС. ΠžΠ±Ρ‹Ρ‡Π½ΠΎ ΡƒΠΏΡ€Π°Π²Π»Π΅Π½ΠΈΠ΅ Ρ‚ΠΎΡ‡ΠΊΠ°ΠΌΠΈ монтирования являСтся ΠΏΡ€Π΅Ρ€ΠΎΠ³Π°Ρ‚ΠΈΠ²ΠΎΠΉ администратора систСмы, Π½ΠΎ эти ΠΆΠ΅ Π·Π°Π΄Π°Ρ‡ΠΈ ΠΌΠΎΠΆΠ½ΠΎ Ρ€Π΅ΡˆΠ°Ρ‚ΡŒ ΠΈ ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΠ½Ρ‹ΠΌ ΠΏΡƒΡ‚Π΅ΠΌ.

Ѐункция SetVolumeMountPoint ΠΌΠΎΠ½Ρ‚ΠΈΡ€ΡƒΠ΅Ρ‚ диск (Π²Ρ‚ΠΎΡ€ΠΎΠΉ Π°Ρ€Π³ΡƒΠΌΠ΅Π½Ρ‚) Π² Ρ‚ΠΎΡ‡ΠΊΠ΅ монтирования, ΡƒΠΊΠ°Π·Π°Π½Π½ΠΎΠΉ ΠΏΠ΅Ρ€Π²Ρ‹ΠΌ Π°Ρ€Π³ΡƒΠΌΠ΅Π½Ρ‚ΠΎΠΌ. НапримСр, Π²Ρ‹Π·ΠΎΠ²

SetVolumeMountPoint("Π‘:\\mycd\\, "D:\\");

ΠΌΠΎΠ½Ρ‚ΠΈΡ€ΡƒΠ΅Ρ‚ диск D: (ΠΊΠΎΡ‚ΠΎΡ€ΠΎΠΌΡƒ Π² ΠΏΠ΅Ρ€ΡΠΎΠ½Π°Π»ΡŒΠ½Ρ‹Ρ… систСмах часто соотвСтствуСт ΠΏΡ€ΠΈΠ²ΠΎΠ΄ ΠΊΠΎΠΌΠΏΠ°ΠΊΡ‚-диска) Π² ΠΊΠ°Ρ‚Π°Π»ΠΎΠ³Π΅ mycd (Ρ‚ΠΎΡ‡ΠΊΠ° монтирования), находящСмуся Π½Π° дискС Π‘:. ΠžΠ±Ρ€Π°Ρ‚ΠΈΡ‚Π΅ Π²Π½ΠΈΠΌΠ°Π½ΠΈΠ΅ Π½Π° Ρ‚ΠΎ, Ρ‡Ρ‚ΠΎ обозначСния всСх ΠΏΡƒΡ‚Π΅ΠΉ доступа Π·Π°ΠΊΠ°Π½Ρ‡ΠΈΠ²Π°ΡŽΡ‚ΡΡ символами ΠΎΠ±Ρ€Π°Ρ‚Π½ΠΎΠΉ косой Ρ‡Π΅Ρ€Ρ‚Ρ‹. Π’ΠΎΠ³Π΄Π° послС примСнСния этой Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΈ ΠΏΡƒΡ‚ΠΈ доступа C:\mycd\memos\book.doc Π±ΡƒΠ΄Π΅Ρ‚ ΡΠΎΠΎΡ‚Π²Π΅Ρ‚ΡΡ‚Π²ΠΎΠ²Π°Ρ‚ΡŒ ΠΏΡƒΡ‚ΡŒ доступа D:\memos\book.doc.

ΠžΠ΄Π½Ρƒ ΠΈ Ρ‚Ρƒ ΠΆΠ΅ Ρ‚ΠΎΡ‡ΠΊΡƒ монтирования ΠΌΠΎΠΆΠ½ΠΎ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚ΡŒ для ΠΏΠΎΠ΄ΠΊΠ»ΡŽΡ‡Π΅Π½ΠΈΡ Π½Π΅ΡΠΊΠΎΠ»ΡŒΠΊΠΈΡ… Ρ„Π°ΠΉΠ»ΠΎΠ²Ρ‹Ρ… систСм. Для размонтирования Ρ„Π°ΠΉΠ»ΠΎΠ²Ρ‹Ρ… систСм слуТит функция DeleteMountPoint.

Ѐункция GetVolumePathName Π²ΠΎΠ·Π²Ρ€Π°Ρ‰Π°Π΅Ρ‚ ΠΊΠΎΡ€Π½Π΅Π²ΡƒΡŽ Ρ‚ΠΎΡ‡ΠΊΡƒ монтирования Π°Π±ΡΠΎΠ»ΡŽΡ‚Π½ΠΎΠ³ΠΎ ΠΈΠ»ΠΈ ΠΎΡ‚Π½ΠΎΡΠΈΡ‚Π΅Π»ΡŒΠ½ΠΎΠ³ΠΎ ΠΏΡƒΡ‚ΠΈ доступа ΠΈΠ»ΠΈ ΠΈΠΌΠ΅Π½ΠΈ Ρ„Π°ΠΉΠ»Π°. Π’ свою ΠΎΡ‡Π΅Ρ€Π΅Π΄ΡŒ, функция GetVolumeNameForVolumeMountPoint прСдоставляСт имя Ρ‚ΠΎΠΌΠ°, Π½Π°ΠΏΡ€ΠΈΠΌΠ΅Ρ€, C:\, ΡΠΎΠΎΡ‚Π²Π΅Ρ‚ΡΡ‚Π²ΡƒΡŽΡ‰Π΅Π³ΠΎ Ρ‚ΠΎΡ‡ΠΊΠ΅ монтирования.

ΠŸΡ€ΠΈΠΌΠ΅Ρ€: Π²Ρ‹Π²ΠΎΠ΄ списка Π°Ρ‚Ρ€ΠΈΠ±ΡƒΡ‚ΠΎΠ² Ρ„Π°ΠΉΠ»Π°

Настало врСмя ΡƒΠ²ΠΈΠ΄Π΅Ρ‚ΡŒ Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΈ управлСния Ρ„Π°ΠΉΠ»Π°ΠΌΠΈ ΠΈ ΠΊΠ°Ρ‚Π°Π»ΠΎΠ³Π°ΠΌΠΈ Π² дСйствии. ΠŸΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΠ° 3.2 прСдставляСт собой ΠΎΠ³Ρ€Π°Π½ΠΈΡ‡Π΅Π½Π½ΡƒΡŽ Π²Π΅Ρ€ΡΠΈΡŽ ΠΊΠΎΠΌΠ°Π½Π΄Ρ‹ UNIX ls, ΠΏΡ€Π΅Π΄Π½Π°Π·Π½Π°Ρ‡Π΅Π½Π½ΠΎΠΉ для Π²Ρ‹Π²ΠΎΠ΄Π° содСрТимого ΠΊΠ°Ρ‚Π°Π»ΠΎΠ³ΠΎΠ², которая позволяСт вывСсти Π΄Π°Ρ‚Ρƒ ΠΈ врСмя послСднСго измСнСния Ρ„Π°ΠΉΠ»Π° ΠΈ Ρ€Π°Π·ΠΌΠ΅Ρ€ Ρ„Π°ΠΉΠ»Π°, хотя данная вСрсия ΠΎΡ‚ΠΎΠ±Ρ€Π°ΠΆΠ°Π΅Ρ‚ лишь ΠΌΠ»Π°Π΄ΡˆΡƒΡŽ Ρ‡Π°ΡΡ‚ΡŒ Ρ€Π°Π·ΠΌΠ΅Ρ€Π° Ρ„Π°ΠΉΠ»Π°.

ΠŸΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΠ° просматриваСт ΠΊΠ°Ρ‚Π°Π»ΠΎΠ³ для поиска Ρ„Π°ΠΉΠ»ΠΎΠ², ΡΠΎΠΎΡ‚Π²Π΅Ρ‚ΡΡ‚Π²ΡƒΡŽΡ‰ΠΈΡ… ΡˆΠ°Π±Π»ΠΎΠ½Ρƒ поиска. Для ΠΊΠ°ΠΆΠ΄ΠΎΠ³ΠΎ Π½Π°ΠΉΠ΄Π΅Π½Π½ΠΎΠ³ΠΎ Ρ„Π°ΠΉΠ»Π° ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΠ° ΠΎΡ‚ΠΎΠ±Ρ€Π°ΠΆΠ°Π΅Ρ‚ имя Ρ„Π°ΠΉΠ»Π° ΠΈ, Ссли Π±Ρ‹Π» Π·Π°Π΄Π°Π½ ΠΏΠ°Ρ€Π°ΠΌΠ΅Ρ‚Ρ€ –1, Ρ‚ΠΎ ΠΈ Π΅Π³ΠΎ Π°Ρ‚Ρ€ΠΈΠ±ΡƒΡ‚Ρ‹. Данная ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΠ° ΠΈΠ»Π»ΡŽΡΡ‚Ρ€ΠΈΡ€ΡƒΠ΅Ρ‚ ΠΏΡ€ΠΈΠ½Ρ†ΠΈΠΏ построСния ΠΌΠ½ΠΎΠ³ΠΈΡ…, хотя ΠΈ Π΄Π°Π»Π΅ΠΊΠΎ Π½Π΅ всСх, Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΉ Windows, ΠΏΡ€Π΅Π΄Π½Π°Π·Π½Π°Ρ‡Π΅Π½Π½Ρ‹Ρ… для Ρ€Π°Π±ΠΎΡ‚Ρ‹ с ΠΊΠ°Ρ‚Π°Π»ΠΎΠ³Π°ΠΌΠΈ. 

Π—Π½Π°Ρ‡ΠΈΡ‚Π΅Π»ΡŒΠ½Π°Ρ Ρ‡Π°ΡΡ‚ΡŒ ΠΊΠΎΠ΄Π° ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΡ‹ 3.2 ΠΎΡ‚Π²Π΅Ρ‡Π°Π΅Ρ‚ Π·Π° ΠΎΠ±Ρ…ΠΎΠ΄ Π΄Π΅Ρ€Π΅Π²Π° ΠΊΠ°Ρ‚Π°Π»ΠΎΠ³ΠΎΠ². Π—Π°ΠΌΠ΅Ρ‚ΡŒΡ‚Π΅, Ρ‡Ρ‚ΠΎ ΠΊΠ°ΠΆΠ΄Ρ‹ΠΉ ΠΊΠ°Ρ‚Π°Π»ΠΎΠ³ проходится Π΄Π²Π°ΠΆΠ΄Ρ‹: ΠΏΡ€ΠΈ ΠΏΠ΅Ρ€Π²ΠΎΠΌ ΠΏΡ€ΠΎΡ…ΠΎΠ΄Π΅ ΠΎΠ±Ρ€Π°Π±Π°Ρ‚Ρ‹Π²Π°ΡŽΡ‚ΡΡ Ρ„Π°ΠΉΠ»Ρ‹, Π° ΠΏΡ€ΠΈ Π²Ρ‚ΠΎΡ€ΠΎΠΌ β€” ΠΏΠΎΠ΄ΠΊΠ°Ρ‚Π°Π»ΠΎΠ³ΠΈ, Ρ‡Π΅ΠΌ обСспСчиваСтся ΠΏΠΎΠ΄Π΄Π΅Ρ€ΠΆΠΊΠ° ΠΏΠ°Ρ€Π°ΠΌΠ΅Ρ‚Ρ€Π° рСкурсивного ΠΎΠ±Ρ…ΠΎΠ΄Π° ΠΊΠ°Ρ‚Π°Π»ΠΎΠ³ΠΎΠ² (-R).

Π’ Ρ‚ΠΎΠΌ Π²ΠΈΠ΄Π΅, ΠΊΠ°ΠΊ ΠΎΠ½Π° прСдставлСна Π½ΠΈΠΆΠ΅, ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΠ° 3.2 Π±ΡƒΠ΄Π΅Ρ‚ ΠΊΠΎΡ€Ρ€Π΅ΠΊΡ‚Π½ΠΎ Π²Ρ‹ΠΏΠΎΠ»Π½ΡΡ‚ΡŒΡΡ Π² Ρ‚ΠΎΠΌ случаС, Ссли ΠΏΡ€ΠΈ Π΅Π΅ Π²Ρ‹Π·ΠΎΠ²Π΅ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΡŽΡ‚ΡΡ ΠΎΡ‚Π½ΠΎΡΠΈΡ‚Π΅Π»ΡŒΠ½Ρ‹Π΅ ΠΏΠΎΠ»Π½Ρ‹Π΅ ΠΈΠΌΠ΅Π½Π° Ρ„Π°ΠΉΠ»ΠΎΠ², Π½Π°ΠΏΡ€ΠΈΠΌΠ΅Ρ€:

lsW –R include\*.h

ВмСстС с Ρ‚Π΅ΠΌ, Π² Ρ€Π΅Π·ΡƒΠ»ΡŒΡ‚Π°Ρ‚Π΅ указания Π°Π±ΡΠΎΠ»ΡŽΡ‚Π½ΠΎΠ³ΠΎ ΠΏΠΎΠ»Π½ΠΎΠ³ΠΎ ΠΈΠΌΠ΅Π½ΠΈ Ρ„Π°ΠΉΠ»Π°, Π½Π°ΠΏΡ€ΠΈΠΌΠ΅Ρ€:

lsW –R C:\Projects\ls\Debug\*.obj

ΠΏΡ€Π°Π²ΠΈΠ»ΡŒΠ½Π°Ρ Ρ€Π°Π±ΠΎΡ‚Π° ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΡ‹ Π±ΡƒΠ΄Π΅Ρ‚ Π½Π°Ρ€ΡƒΡˆΠ΅Π½Π°, ΠΏΠΎΡΠΊΠΎΠ»ΡŒΠΊΡƒ Π² Π½Π΅ΠΉ самым сущСствСнным ΠΎΠ±Ρ€Π°Π·ΠΎΠΌ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΠ΅Ρ‚ΡΡ привязка ΠΊΠ°Ρ‚Π°Π»ΠΎΠ³ΠΎΠ² ΠΊ Ρ‚Π΅ΠΊΡƒΡ‰Π΅ΠΌΡƒ ΠΊΠ°Ρ‚Π°Π»ΠΎΠ³Ρƒ. Π—Π°Π²Π΅Ρ€ΡˆΠ΅Π½Π½ΠΎΠ΅ Ρ€Π΅ΡˆΠ΅Π½ΠΈΠ΅ (доступноС Π½Π° Web-сайтС) Π°Π½Π°Π»ΠΈΠ·ΠΈΡ€ΡƒΠ΅Ρ‚ Π°Π±ΡΠΎΠ»ΡŽΡ‚Π½Ρ‹Π΅ ΠΏΠΎΠ»Π½Ρ‹Π΅ ΠΏΡƒΡ‚ΠΈ доступа ΠΊ Ρ„Π°ΠΉΠ»Π°ΠΌ ΠΈ поэтому обСспСчиваСт ΠΏΡ€Π°Π²ΠΈΠ»ΡŒΠ½ΠΎΠ΅ Π²Ρ‹ΠΏΠΎΠ»Π½Π΅Π½ΠΈΠ΅ ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΡ‹ ΠΈ для Π²Ρ‚ΠΎΡ€ΠΎΠΉ ΠΊΠΎΠΌΠ°Π½Π΄Ρ‹.

ΠŸΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΠ° 3.2. lsw: Π²Ρ‹Π²ΠΎΠ΄ списка Ρ„Π°ΠΉΠ»ΠΎΠ² ΠΈ ΠΎΠ±Ρ…ΠΎΠ΄ Π΄Π΅Ρ€Π΅Π²Π° ΠΊΠ°Ρ‚Π°Π»ΠΎΠ³ΠΎΠ² 

/* Π“Π»Π°Π²Π° 3. lsW β€” ΠΊΠΎΠΌΠ°Π½Π΄Π° Π²Ρ‹Π²ΠΎΠ΄Π° списка Ρ„Π°ΠΉΠ»ΠΎΠ² */

/* lsW [ΠΏΠ°Ρ€Π°ΠΌΠ΅Ρ‚Ρ€Ρ‹] [Ρ„Π°ΠΉΠ»Ρ‹] */

#include "EvryThng.h"

BOOL TraverseDirectory(LPCTSTR, DWORD, LPBOOL);

DWORD FileType(LPWIN32_FIND_DATA);

BOOL ProcessItem(LPWIN32_FIND_DATA, DWORD, LPBOOL);


int _tmain(int argc, LPTSTR argv[]) {

 BOOL Flags [MAX_OPTIONS], ok = TRUE;

 TCHAR PathName [MAX_PATH +1], CurrPath [MAX_PATH + 1];

 LPTSTR pSlash, pFileName;

 int i, FileIndex;

 FileIndex = Options(argc, argv, _T("R1"), &Flags[0], &Flags[1], NULL);

 I* "Π Π°Π·ΠΎΠ±Ρ€Π°Ρ‚ΡŒ" шаблон поиска Π½Π° "Ρ€ΠΎΠ΄ΠΈΡ‚Π΅Π»ΡŒΡΠΊΡƒΡŽ Ρ‡Π°ΡΡ‚ΡŒ" ΠΈ имя Ρ„Π°ΠΉΠ»Π°. */

 GetCurrentDirectory(MAX_PATH, CurrPath); /* Π‘ΠΎΡ…Ρ€Π°Π½ΠΈΡ‚ΡŒ Ρ‚Π΅ΠΊΡƒΡ‰ΠΈΠΉ ΠΏΡƒΡ‚ΡŒ доступа. */

 if (argc < FileIndex +1) /* ΠŸΡƒΡ‚ΡŒ доступа Π½Π΅ ΡƒΠΊΠ°Π·Π°Π½. Π˜ΡΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚ΡŒ Ρ‚Π΅ΠΊΡƒΡ‰ΠΈΠΉ ΠΊΠ°Ρ‚Π°Π»ΠΎΠ³. */

  ok = TraverseDirectory(_T("*"), MAX_OPTIONS, Flags);

 else for (i = FileIndex; i < argc; i++) {

  /* ΠžΠ±Ρ€Π°Π±ΠΎΡ‚Π°Ρ‚ΡŒ всС ΠΏΡƒΡ‚ΠΈ, ΡƒΠΊΠ°Π·Π°Π½Π½Ρ‹Π΅ Π² ΠΊΠΎΠΌΠ°Π½Π΄Π½ΠΎΠΉ строкС. */

  ok = TraverseDirectory(pFileName, MAX_OPTIONS, Flags) && ok;

  SetCurrentDirectory(CurrPath);

  /* Π’ΠΎΡΡΡ‚Π°Π½ΠΎΠ²ΠΈΡ‚ΡŒ ΠΊΠ°Ρ‚Π°Π»ΠΎΠ³. */

 }

 return ok ? 0 : 1;

}


static BOOL TraverseDirectory(LPCTSTR PathName, DWORD NumFlags, LPBOOL Flags)

/* ΠžΠ±Ρ…ΠΎΠ΄ Π΄Π΅Ρ€Π΅Π²Π° ΠΊΠ°Ρ‚Π°Π»ΠΎΠ³ΠΎΠ²; Π²Ρ‹ΠΏΠΎΠ»Π½ΠΈΡ‚ΡŒ Ρ„ΡƒΠ½ΠΊΡ†ΠΈΡŽ ProcessItem для ΠΊΠ°ΠΆΠ΄ΠΎΠ³ΠΎ случая совпадСния. */

/* PathName: ΠΎΡ‚Π½ΠΎΡΠΈΡ‚Π΅Π»ΡŒΠ½ΠΎΠ΅ ΠΈΠ»ΠΈ Π°Π±ΡΠΎΠ»ΡŽΡ‚Π½ΠΎΠ΅ имя просматриваСмого ΠΊΠ°Ρ‚Π°Π»ΠΎΠ³Π°.*/

{

 HANDLE SearchHandle;

 WIN32_FIND_DATA FindData;

 BOOL Recursive = Flags[0];

 DWORD FType, iPass;

 TCHAR CurrPath[MAX_PATH + 1];

 GetCurrentDirectory(MAX_PATH, CurrPath);

 for (iPass = 1; iPass <= 2; iPass++) {

  /* ΠŸΡ€ΠΎΡ…ΠΎΠ΄ 1: Π²Ρ‹Π²ΠΎΠ΄ списка Ρ„Π°ΠΉΠ»ΠΎΠ². */

  /* ΠŸΡ€ΠΎΡ…ΠΎΠ΄ 2: ΠΎΠ±Ρ…ΠΎΠ΄ Π΄Π΅Ρ€Π΅Π²Π° ΠΊΠ°Ρ‚Π°Π»ΠΎΠ³ΠΎΠ² (Ссли Π·Π°Π΄Π°Π½Π° опция –R). */

  SearchHandle = FindFirstFile(PathName, &FindData);

  do {

   FType = FileType(&FindData);

   /* Π€Π°ΠΉΠ» ΠΈΠ»ΠΈ ΠΊΠ°Ρ‚Π°Π»ΠΎΠ³? */

   if (iPass == 1) /* ВывСсти имя ΠΈ Π°Ρ‚Ρ€ΠΈΠ±ΡƒΡ‚Ρ‹ Ρ„Π°ΠΉΠ»Π°. */

    ProcessItem(&FindData, MAX_OPTIONS, Flags);

   if (FType == TYPE_DIR && iPass == 2 && Recursive) {

    /* ΠžΠ±Ρ€Π°Π±ΠΎΡ‚Π°Ρ‚ΡŒ ΠΏΠΎΠ΄ΠΊΠ°Ρ‚Π°Π»ΠΎΠ³. */

    _tprintf(_T ("\n%s\\%s:"), CurrPath, FindData.cFileName);

    /* ΠŸΠΎΠ΄Π³ΠΎΡ‚ΠΎΠ²ΠΊΠ° ΠΊ ΠΎΠ±Ρ…ΠΎΠ΄Ρƒ ΠΊΠ°Ρ‚Π°Π»ΠΎΠ³Π°. */

    SetCurrentDirectory(FindData.cFileName);

    TraverseDirectory(_T("*"), NumFlags, Flags);

    /* РСкурсивный Π²Ρ‹Π·ΠΎΠ². */

    SetCurrentDirectory(_T(".."));

   }

  } while (FindNextFile(SearchHandle, &FindData));

  FindClose (SearchHandle);

 }

 return TRUE;

}


static BOOL ProcessItem(LPWIN32_FIND_DATA pFileData, DWORD NumFlags, LPBOOL Flags)

/* Π’Ρ‹Π²ΠΎΠ΄ΠΈΡ‚ список Π°Ρ‚Ρ€ΠΈΠ±ΡƒΡ‚ΠΎΠ² Ρ„Π°ΠΉΠ»Π° ΠΈΠ»ΠΈ ΠΊΠ°Ρ‚Π°Π»ΠΎΠ³Π°. */

{

 const TCHAR FileTypeChar[] = {' ', 'd'};

 DWORD FType = FileType(pFileData);

 BOOL Long = Flags[1];

 SYSTEMTIME LastWrite;

 if (FType != TYPE_FILE && FType != TYPE_DIR) return FALSE;

 _tprintf(_T ("\n"));

 if (Long) { /* Π£ΠΊΠ°Π·Π°Π½ Π»ΠΈ Π² ΠΊΠΎΠΌΠ°Π½Π΄Π½ΠΎΠΉ строкС ΠΏΠ°Ρ€Π°ΠΌΠ΅Ρ‚Ρ€ "-1"? */

  _tprintf(_T("%c"), FileTypeChar[FType – 1]);

  _tprintf(_T("%10d"), pFileData->nFileSizeLow); 

  FileTimeToSystemTime(&(pFileData->ftLastWriteTime), &LastWrite);

  _tprintf(_T(" %02d/%02d/%04d %02d:%02d:%02d"), LastWrite.wMonth, LastWrite.wDay, LastWrite.wYear, LastWrite.wHour, LastWrite.wMinute, LastWrite.wSecond);

 }

 _tprintf(_T(" %s"), pFileData->cFileName);

 return TRUE;

}


static DWORD FileType(LPWIN32_FIND_DATA pFileData)

/* ΠŸΠΎΠ΄Π΄Π΅Ρ€ΠΆΠΈΠ²Π°Π΅ΠΌΡ‹Π΅ Ρ‚ΠΈΠΏΡ‹ Ρ„Π°ΠΉΠ»ΠΎΠ² – TYPE_FILE: Ρ„Π°ΠΉΠ»; TYPE_DIR: ΠΊΠ°Ρ‚Π°Π»ΠΎΠ³; TYPE_DOT: ΠΊΠ°Ρ‚Π°Π»ΠΎΠ³ΠΈ . ΠΈΠ»ΠΈ .. */

{

 BOOL IsDir;

 DWORD FType;

 FType = TYPE_FILE;

 IsDir = (pFileData->dwFileAttributes & FILE_ATTRIBUTE_DIRECTORY) != 0;

 if (IsDir) if (lstrcmp(pFileData->cFileName, _T(".")) == 0 || lstrcmp(pFileData->cFileName, _T("..")) == 0) FType = TYPE_DOT;

 else FType = TYPE_DIR;

 return FType;

}

ΠŸΡ€ΠΈΠΌΠ΅Ρ€: установка ΠΌΠ΅Ρ‚ΠΎΠΊ Π²Ρ€Π΅ΠΌΠ΅Π½ΠΈ Ρ„Π°ΠΉΠ»Π°

ΠŸΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΠ° 3.3 Ρ€Π΅Π°Π»ΠΈΠ·ΡƒΠ΅Ρ‚ UNIX-ΠΊΠΎΠΌΠ°Π½Π΄Ρƒ touch, ΠΏΡ€Π΅Π΄Π½Π°Π·Π½Π°Ρ‡Π΅Π½Π½ΡƒΡŽ для измСнСния ΠΊΠΎΠ΄Π° Π·Π°Ρ‰ΠΈΡ‚Ρ‹ Ρ„Π°ΠΉΠ»ΠΎΠ² ΠΈ обновлСния ΠΌΠ΅Ρ‚ΠΎΠΊ Π²Ρ€Π΅ΠΌΠ΅Π½ΠΈ Π΄ΠΎ Ρ‚Π΅ΠΊΡƒΡ‰ΠΈΡ… Π·Π½Π°Ρ‡Π΅Π½ΠΈΠΉ систСмного Π²Ρ€Π΅ΠΌΠ΅Π½ΠΈ. Π’ ΡƒΠΏΡ€Π°ΠΆΠ½Π΅Π½ΠΈΠΈ 3.11 ΠΎΡ‚ вас трСбуСтся Ρ€Π°ΡΡˆΠΈΡ€ΠΈΡ‚ΡŒ возмоТности Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΈ touch Ρ‚Π°ΠΊΠΈΠΌ ΠΎΠ±Ρ€Π°Π·ΠΎΠΌ, Ρ‡Ρ‚ΠΎΠ±Ρ‹ Π½ΠΎΠ²Ρ‹Π΅ значСния ΠΌΠ΅Ρ‚ΠΎΠΊ Π²Ρ€Π΅ΠΌΠ΅Π½ΠΈ ΠΌΠΎΠΆΠ½ΠΎ Π±Ρ‹Π»ΠΎ ΡƒΠΊΠ°Π·Ρ‹Π²Π°Ρ‚ΡŒ Π² ΠΏΠ°Ρ€Π°ΠΌΠ΅Ρ‚Ρ€Π°Ρ… ΠΊΠΎΠΌΠ°Π½Π΄Π½ΠΎΠΉ строки.