CatFile (hInFile, hStdOut);
CloseHandle (hInFile);
}
return 0;
}
/* Π€ΡΠ½ΠΊΡΠΈΡ, Π²ΡΠΏΠΎΠ»Π½ΡΡΡΠ°Ρ Π²ΡΡ ΡΠ°Π±ΠΎΡΡ:
/* ΡΠΈΡΠ°Π΅Ρ Π²Ρ ΠΎΠ΄Π½ΡΠ΅ Π΄Π°Π½Π½ΡΠ΅ ΠΈ ΠΊΠΎΠΏΠΈΡΡΠ΅Ρ ΠΈΡ Π½Π° ΡΡΠ°Π½Π΄Π°ΡΡΠ½ΠΎΠ΅ ΡΡΡΡΠΎΠΉΡΡΠ²Π° Π²ΡΠ²ΠΎΠ΄Π°. */
static VOID CatFile(HANDLE hInFile, HANDLE hOutFile) {
DWORD nIn, nOut;
BYTE Buffer [BUF_SIZE];
while (ReadFile(hInFile, Buffer, BUF_SIZE, &nIn, NULL) && (nIn != 0) && WriteFile(hOutFile, Buffer, nIn, &nOut, NULL));
return;
}
ΠΡΠΈΠΌΠ΅Ρ: ΠΏΡΠ΅ΠΎΠ±ΡΠ°Π·ΠΎΠ²Π°Π½ΠΈΠ΅ ΡΠΈΠΌΠ²ΠΎΠ»ΠΎΠ² ΠΈΠ· ASCII Π² Unicode
ΠΡΠΎΠ³ΡΠ°ΠΌΠΌΠ° 2.4 Π΄ΠΎΡΡΡΠ°ΠΈΠ²Π°Π΅Ρ ΠΏΡΠΎΠ³ΡΠ°ΠΌΠΌΡ 1.3, Π² ΠΊΠΎΡΠΎΡΠΎΠΉ ΠΈΡΠΏΠΎΠ»ΡΠ·ΠΎΠ²Π°Π»Π°ΡΡ Π²ΡΠΏΠΎΠΌΠΎΠ³Π°ΡΠ΅Π»ΡΠ½Π°Ρ ΡΡΠ½ΠΊΡΠΈΡ CopyFile. Π‘ ΠΊΠΎΠΏΠΈΡΠΎΠ²Π°Π½ΠΈΠ΅ΠΌ ΡΠ°ΠΉΠ»ΠΎΠ² Π²Ρ ΡΠΆΠ΅ Π·Π½Π°ΠΊΠΎΠΌΡ, ΠΏΠΎΡΡΠΎΠΌΡ Π² Π΄Π°Π½Π½ΠΎΠΌ ΠΏΡΠΈΠΌΠ΅ΡΠ΅ ΡΡΠ° ΠΎΠΏΠ΅ΡΠ°ΡΠΈΡ Π΄ΠΎΠΏΠΎΠ»Π½ΡΠ΅ΡΡΡ ΠΏΡΠ΅ΠΎΠ±ΡΠ°Π·ΠΎΠ²Π°Π½ΠΈΠ΅ΠΌ ΡΠ°ΠΉΠ»Π° ΠΊ ΠΊΠΎΠ΄ΠΈΡΠΎΠ²ΠΊΠ΅ Unicode Π² ΠΏΡΠ΅Π΄ΠΏΠΎΠ»ΠΎΠΆΠ΅Π½ΠΈΠΈ, ΡΡΠΎ ΠΏΠ΅ΡΠ²ΠΎΠ½Π°ΡΠ°Π»ΡΠ½ΠΎΠΉ ΠΊΠΎΠ΄ΠΈΡΠΎΠ²ΠΊΠΎΠΉ ΡΠΈΠΌΠ²ΠΎΠ»ΠΎΠ² ΡΠ²Π»ΡΠ΅ΡΡΡ ASCII, Ρ ΠΎΡΡ ΠΏΡΠΎΠ²Π΅ΡΠΊΠ° ΡΡΠΎΠ³ΠΎ ΠΏΡΠ΅Π΄ΠΏΠΎΠ»ΠΎΠΆΠ΅Π½ΠΈΡ Π½Π΅ ΠΏΡΠΎΠΈΠ·Π²ΠΎΠ΄ΠΈΡΡΡ. Π ΠΏΡΠΎΠ³ΡΠ°ΠΌΠΌΠ΅ ΠΏΡΠ΅Π΄ΡΡΠΌΠΎΡΡΠ΅Π½Ρ Π½Π΅ΠΊΠΎΡΠΎΡΡΠ΅ Π²ΠΎΠ·ΠΌΠΎΠΆΠ½ΠΎΡΡΠΈ Π²ΡΠ²ΠΎΠ΄Π° ΡΠΎΠΎΠ±ΡΠ΅Π½ΠΈΠΉ ΠΎΠ± ΠΎΡΠΈΠ±ΠΊΠ°Ρ ΠΈ ΠΏΠ°ΡΠ°ΠΌΠ΅ΡΡ, ΠΏΠΎΠ·Π²ΠΎΠ»ΡΡΡΠΈΠΉ ΠΏΠΎΠ΄Π°Π²ΠΈΡΡ Π·Π°ΠΌΠ΅Π½Ρ ΡΡΡΠ΅ΡΡΠ²ΡΡΡΠ΅Π³ΠΎ ΡΠ°ΠΉΠ»Π°; Π·Π°Π²Π΅ΡΡΠ°ΡΡΠΈΠΉ Π²ΡΠ·ΠΎΠ² ΡΡΠ½ΠΊΡΠΈΠΈ CopyFile Π·Π°ΠΌΠ΅Π½Π΅Π½ Π² ΠΏΡΠΎΠ³ΡΠ°ΠΌΠΌΠ΅ Π²ΡΠ·ΠΎΠ²ΠΎΠΌ Π½ΠΎΠ²ΠΎΠΉ ΡΡΠ½ΠΊΡΠΈΠΈ, ΠΊΠΎΡΠΎΡΠ°Ρ ΠΡΠΏΠΎΠ»Π½ΡΠ΅Ρ ΠΏΡΠ΅ΠΎΠ±ΡΠ°Π·ΠΎΠ²Π°Π½ΠΈΠ΅ ΡΠΈΠΌΠ²ΠΎΠ»ΡΠ½ΡΡ ΡΡΡΠΎΠΊ ΡΠ°ΠΉΠ»Π° ΠΈΠ· ΠΊΠΎΠ΄ΠΈΡΠΎΠ²ΠΊΠΈ ASCII Π² ΠΊΠΎΠ΄ΠΈΡΠΎΠ²ΠΊΡ Unicode.
Π Π΄Π°Π½Π½ΠΎΠΉ ΠΏΡΠΎΠ³ΡΠ°ΠΌΠΌΠ΅ ΠΎΡΠ½ΠΎΠ²Π½ΠΎΠ΅ Π²Π½ΠΈΠΌΠ°Π½ΠΈΠ΅ ΡΠ΄Π΅Π»ΡΠ΅ΡΡΡ ΠΎΠ±Π΅ΡΠΏΠ΅ΡΠ΅Π½ΠΈΡ Π²ΠΎΠ·ΠΌΠΎΠΆΠ½ΠΎΡΡΠΈ ΡΡΠΏΠ΅ΡΠ½ΠΎΠ³ΠΎ Π·Π°Π²Π΅ΡΡΠ΅Π½ΠΈΡ ΠΏΡΠ΅ΠΎΠ±ΡΠ°Π·ΠΎΠ²Π°Π½ΠΈΡ. Π€Π°ΠΊΡΠΈΡΠ΅ΡΠΊΠΎΠ΅ Π²ΡΠΏΠΎΠ»Π½Π΅Π½ΠΈΠ΅ ΠΏΡΠ΅ΠΎΠ±ΡΠ°Π·ΠΎΠ²Π°Π½ΠΈΡ ΡΠΎΡΡΠ΅Π΄ΠΎΡΠΎΡΠ΅Π½ΠΎ Π² Π΅Π΄ΠΈΠ½ΡΡΠ²Π΅Π½Π½ΠΎΠΉ ΡΡΠ½ΠΊΡΠΈΠΈ, Π²ΡΠ·ΡΠ²Π°Π΅ΠΌΠΎΠΉ Π² ΡΠ°ΠΌΠΎΠΌ ΠΊΠΎΠ½ΡΠ΅ ΠΏΡΠΎΠ³ΡΠ°ΠΌΠΌΡ. ΠΡΠΎΡ ΡΡΠ°Π³ΠΌΠ΅Π½Ρ, ΠΊΠ°ΠΊ ΠΈ Π°Π½Π°Π»ΠΎΠ³ΠΈΡΠ½ΡΠΉ Π΅ΠΌΡ ΡΡΠ°Π³ΠΌΠ΅Π½Ρ ΠΏΡΠ΅Π΄ΡΠ΄ΡΡΠ΅ΠΉ ΠΏΡΠΎΠ³ΡΠ°ΠΌΠΌΡ, ΠΏΠΎΡΠ»ΡΠΆΠΈΡ Π½Π°ΠΌ ΡΠ°Π±Π»ΠΎΠ½ΠΎΠΌ ΠΈ Π±ΡΠ΄Π΅Ρ Π²Π½ΠΎΠ²Ρ ΠΈΡΠΏΠΎΠ»ΡΠ·ΠΎΠ²Π°ΡΡΡΡ Π² ΠΏΠΎΡΠ»Π΅Π΄ΡΡΡΠΈΡ ΠΏΡΠΎΠ³ΡΠ°ΠΌΠΌΠ°Ρ Π±Π΅Π· ΠΏΠΎΠ²ΡΠΎΡΠ΅Π½ΠΈΡ Π΅Π³ΠΎ ΠΈΡΡ ΠΎΠ΄Π½ΠΎΠ³ΠΎ ΠΊΠΎΠ΄Π°.
ΠΠ±ΡΠ°ΡΠΈΡΠ΅ Π²Π½ΠΈΠΌΠ°Π½ΠΈΠ΅ Π½Π° Π²ΡΠ·ΠΎΠ² ΡΡΠ½ΠΊΡΠΈΠΈ _taccess, ΠΏΡΠΎΠ²Π΅ΡΡΡΡΠ΅ΠΉ ΡΡΡΠ΅ΡΡΠ²ΠΎΠ²Π°Π½ΠΈΠ΅ ΡΠ°ΠΉΠ»Π°. ΠΡΠ° ΡΡΠ½ΠΊΡΠΈΡ ΡΠ²Π»ΡΠ΅ΡΡΡ ΠΎΠ±ΠΎΠ±ΡΠ΅Π½Π½ΠΎΠΉ Π²Π΅ΡΡΠΈΠ΅ΠΉ ΡΡΠ½ΠΊΡΠΈΠΈ access, ΠΊΠΎΡΠΎΡΠ°Ρ ΠΈΠΌΠ΅Π΅ΡΡΡ Π² Π±ΠΈΠ±Π»ΠΈΠΎΡΠ΅ΠΊΠ΅ UNIX, Π½ΠΎ Π½Π΅ Π²Ρ ΠΎΠ΄ΠΈΡ Π² ΡΠΎΡΡΠ°Π² ΡΡΠ°Π½Π΄Π°ΡΡΠ½ΠΎΠΉ Π±ΠΈΠ±Π»ΠΈΠΎΡΠ΅ΠΊΠΈ Π‘. ΠΠ΅ ΠΎΠΏΡΠ΅Π΄Π΅Π»Π΅Π½ΠΈΠ΅ ΡΠΎΠ΄Π΅ΡΠΆΠΈΡΡΡ Π² ΡΠ°ΠΉΠ»Π΅ <io.h>. ΠΡΠ»ΠΈ Π³ΠΎΠ²ΠΎΡΠΈΡΡ ΡΠΎΡΠ½Π΅Π΅, ΡΡΠ½ΠΊΡΠΈΡ _taccess ΠΎΡΡΡΠ΅ΡΡΠ²Π»ΡΠ΅Ρ ΠΏΡΠΎΠ²Π΅ΡΠΊΡ ΠΏΡΠ°Π² Π΄ΠΎΡΡΡΠΏΠ° ΠΊ ΡΠ°ΠΉΠ»Ρ Π² ΡΠΎΠΎΡΠ²Π΅ΡΡΡΠ²ΠΈΠΈ Ρ ΡΠ΅ΠΆΠΈΠΌΠΎΠΌ, ΡΡΡΠ°Π½ΠΎΠ²Π»Π΅Π½Π½ΡΠΌ Π·Π½Π°ΡΠ΅Π½ΠΈΠ΅ΠΌ Π²ΡΠΎΡΠΎΠ³ΠΎ ΠΏΠ°ΡΠ°ΠΌΠ΅ΡΡΠ°. ΠΠ½Π°ΡΠ΅Π½ΠΈΠ΅ 0 Π·Π°Π΄Π°Π΅Ρ ΠΏΡΠΎΠ²Π΅ΡΠΊΡ ΡΡΡΠ΅ΡΡΠ²ΠΎΠ²Π°Π½ΠΈΡ ΡΠ°ΠΉΠ»Π°, 2 β ΠΏΡΠΎΠ²Π΅ΡΠΊΡ Π½Π°Π»ΠΈΡΠΈΡ ΡΠ°Π·ΡΠ΅ΡΠ΅Π½ΠΈΡ Π½Π° Π·Π°ΠΏΠΈΡΡ Π² ΡΠ°ΠΉΠ», 4 β ΠΏΡΠΎΠ²Π΅ΡΠΊΡ Π½Π°Π»ΠΈΡΠΈΡ ΡΠ°Π·ΡΠ΅ΡΠ΅Π½ΠΈΡ Π½Π° ΡΡΠ΅Π½ΠΈΠ΅ ΠΈΠ· ΡΠ°ΠΉΠ»Π°, 6 β ΠΏΡΠΎΠ²Π΅ΡΠΊΡ Π½Π°Π»ΠΈΡΠΈΡ ΡΠ°Π·ΡΠ΅ΡΠ΅Π½ΠΈΡ ΠΊΠ°ΠΊ Π½Π° ΡΡΠ΅Π½ΠΈΠ΅ ΠΈΠ· ΡΠ°ΠΉΠ»Π°, ΡΠ°ΠΊ ΠΈ Π½Π° Π·Π°ΠΏΠΈΡΡ Π² ΡΠ°ΠΉΠ» (ΡΡΠΈ Π·Π½Π°ΡΠ΅Π½ΠΈΡ Π½Π΅ ΡΠ²ΡΠ·Π°Π½Ρ Π½Π°ΠΏΡΡΠΌΡΡ Ρ ΡΠ°ΠΊΠΈΠΌΠΈ ΠΏΠ°ΡΠ°ΠΌΠ΅ΡΡΠ°ΠΌΠΈ Π΄ΠΎΡΡΡΠΏΠ°, ΠΈΡΠΏΠΎΠ»ΡΠ·ΡΠ΅ΠΌΡΠΌΠΈ Π² Windows, ΠΊΠ°ΠΊ GENERIC_READ). ΠΠ»ΡΡΠ΅ΡΠ½Π°ΡΠΈΠ²ΠΎΠΉ ΠΏΡΠΎΠ²Π΅ΡΠΊΠ΅ ΡΡΡΠ΅ΡΡΠ²ΠΎΠ²Π°Π½ΠΈΡ ΡΠ°ΠΉΠ»Π° ΠΌΠΎΠ³Π»ΠΎ Π±Ρ Π±ΡΡΡ ΠΎΡΠΊΡΡΡΠΈΠ΅ Π΄Π΅ΡΠΊΡΠΈΠΏΡΠΎΡΠ° ΠΏΡΠΈ ΠΏΠΎΠΌΠΎΡΠΈ ΡΡΠ½ΠΊΡΠΈΠΈ CreateFile ΠΈ Π΅Π³ΠΎ ΠΏΠΎΡΠ»Π΅Π΄ΡΡΡΠ΅Π΅ Π·Π°ΠΊΡΡΡΠΈΠ΅ ΠΏΠΎΡΠ»Π΅ ΠΏΡΠΎΠ²Π΅ΡΠΊΠΈ Π΄Π΅ΠΉΡΡΠ²ΠΈΡΠ΅Π»ΡΠ½ΠΎΡΡΠΈ Π΄Π΅ΡΠΊΡΠΈΠΏΡΠΎΡΠ°.
ΠΡΠΎΠ³ΡΠ°ΠΌΠΌΠ° 2.4. atou: ΠΏΡΠ΅ΠΎΠ±ΡΠ°Π·ΠΎΠ²Π°Π½ΠΈΠ΅ ΡΠ°ΠΉΠ»Π° Ρ Π²ΡΠ²ΠΎΠ΄ΠΎΠΌ ΡΠΎΠΎΠ±ΡΠ΅Π½ΠΈΠΉ ΠΎΠ± ΠΎΡΠΈΠ±ΠΊΠ°Ρ/* ΠΠ»Π°Π²Π° 2. atou β ΠΊΠΎΠΏΠΈΡΠΎΠ²Π°Π½ΠΈΠ΅ ΡΠ°ΠΉΠ»ΠΎΠ² Ρ ΠΏΡΠ΅ΠΎΠ±ΡΠ°Π·ΠΎΠ²Π°Π½ΠΈΠ΅ΠΌ ΠΈΠ· ASCII Π² Unicode. */
#include "EvryThng.h"
BOOL Asc2Un(LPCTSTR, LPCTSTR, BOOL);
int _tmain(int argc, LPTSTR argv[]) {
DWORD LocFileIn, LocFileOut;
BOOL DashI = FALSE;
TCHAR YNResp[3] = _T("y");
/* ΠΠΎΠ»ΡΡΠΈΡΡ ΠΏΠ°ΡΠ°ΠΌΠ΅ΡΡΡ ΠΊΠΎΠΌΠ°Π½Π΄Π½ΠΎΠΉ ΡΡΡΠΎΠΊΠΈ ΠΈ ΠΈΠ½Π΄Π΅ΠΊΡ Π²Ρ ΠΎΠ΄Π½ΠΎΠ³ΠΎ ΡΠ°ΠΉΠ»Π°. */
LocFileIn = Options(argc, argv, _T("i"), &DashI, NULL);
LocFileOut = LocFileIn + 1;
if (DashI) { /* Π‘ΡΡΠ΅ΡΡΠ²ΡΠ΅Ρ Π»ΠΈ Π²ΡΡ ΠΎΠ΄Π½ΠΎΠΉ ΡΠ°ΠΉΠ»? */
/* ΠΠ±ΠΎΠ±ΡΠ΅Π½Π½Π°Ρ Π²Π΅ΡΡΠΈΡ ΡΡΠ½ΠΊΡΠΈΠΈ access, ΠΎΡΡΡΠ΅ΡΡΠ²Π»ΡΡΡΠ°Ρ ΠΏΡΠΎΠ²Π΅ΡΠΊΡ ΡΡΡΠ΅ΡΡΠ²ΠΎΠ²Π°Π½ΠΈΡ ΡΠ°ΠΉΠ»Π°. */
if (_taccess(argv[LocFileOut], 0) == 0) {
_tprintf(_T("ΠΠ΅ΡΠ΅Π·Π°ΠΏΠΈΡΠ°ΡΡ ΡΡΡΠ΅ΡΡΠ²ΡΡΡΠΈΠΉ ΡΠ°ΠΉΠ»? [y/n]"));
_tscanf(_T ("%s"), &YNResp);
if (lstrcmp(CharLower(YNResp), YES) != 0) ReportError(_T("ΠΡΠΊΠ°Π· ΠΎΡ ΠΏΠ΅ΡΠ΅Π·Π°ΠΏΠΈΡΠΈ"), 4, FALSE);
}
}
/* ΠΡΠ° ΡΡΠ½ΠΊΡΠΈΡ ΠΏΠΎΡΡΡΠΎΠ΅Π½Π° Π½Π° ΠΎΡΠ½ΠΎΠ²Π΅ ΡΡΠ½ΠΊΡΠΈΠΈ CopyFile. */
Asc2Un(argv[LocFileIn], argv [LocFileOut], FALSE);
return 0;
}
ΠΡΠΎΠ³ΡΠ°ΠΌΠΌΠ° 2.5 β ΡΡΠΎ Π²ΡΠ·ΡΠ²Π°Π΅ΠΌΠ°Ρ Π² ΠΏΡΠΎΠ³ΡΠ°ΠΌΠΌΠ΅ 2.4 ΡΡΠ½ΠΊΡΠΈΡ Asc2Un, ΠΎΡΡΡΠ΅ΡΡΠ²Π»ΡΡΡΠ°Ρ ΠΏΡΠ΅ΠΎΠ±ΡΠ°Π·ΠΎΠ²Π°Π½ΠΈΠ΅ ΠΊΠΎΠ΄ΠΈΡΠΎΠ²ΠΊΠΈ ΡΠΈΠΌΠ²ΠΎΠ»ΠΎΠ².
ΠΡΠΎΠ³ΡΠ°ΠΌΠΌΠ° 2.5. Π€ΡΠ½ΠΊΡΠΈΡ Asc2Un#include "EvryThng.h"
#define BUF_SIZE 256
BOOL Asc2Un(LPCTSTR fIn, LPCTSTR fOut, BOOL bFailIfExists)
/* Π€ΡΠ½ΠΊΡΠΈΡ ΠΊΠΎΠΏΠΈΡΠΎΠ²Π°Π½ΠΈΡ ΡΠ°ΠΉΠ»ΠΎΠ² Ρ ΠΏΡΠ΅ΠΎΠ±ΡΠ°Π·ΠΎΠ²Π°Π½ΠΈΠ΅ΠΌ ΠΈΠ· ASCII Π² Unicode. Π€ΡΠ½ΠΊΡΠΈΡ ΠΏΠΎΡΡΡΠΎΠ΅Π½Π° Π½Π° ΠΎΡΠ½ΠΎΠ²Π΅ ΡΡΠ½ΠΊΡΠΈΠΈ CopyFile. */
{
HANDLE hIn, hOut;
DWORD dwOut, nIn, nOut, iCopy;
CHAR aBuffer[BUF_SIZE];
WCHAR uBuffer [BUF_SIZE];
BOOL WriteOK = TRUE;
hIn = CreateFile(fin, GENERIC_READ, 0, NULL, OPEN_EXISTING, FILE_ATTRIBUTE_NORMAL, NULL);
/* ΠΠΏΡΠ΅Π΄Π΅Π»ΠΈΡΡ ΠΏΠΎΠ²Π΅Π΄Π΅Π½ΠΈΠ΅ ΡΡΠ½ΠΊΡΠΈΠΈ CreateFile, Π΅ΡΠ»ΠΈ Π²ΡΡ ΠΎΠ΄Π½ΠΎΠΉ ΡΠ°ΠΉΠ» ΡΠΆΠ΅ ΡΡΡΠ΅ΡΡΠ²ΡΠ΅Ρ. */
dwOut = bFailIfExists ? CREATE_NEW : CREATE_ALWAYS;
hOut = CreateFile(fOut, GENERIC_WRITE, 0, NULL, dwOut, FILE_ATTRIBUTE_NORMAL, NULL);
while (ReadFile(hIn, aBuffer, BUF_SIZE, &nIn, NULL) && nIn > 0 && WriteOK) {
for (iCopy = 0; iCopy < nIn; iCopy++)
/* ΠΡΠ΅ΠΎΠ±ΡΠ°Π·ΠΎΠ²Π°ΡΡ ΠΊΠ°ΠΆΠ΄ΡΠΉ ΡΠΈΠΌΠ²ΠΎΠ». */
uBuffer[iCopy] = (WCHAR)aBuffer [iCopy];
WriteOK = WriteFile(hOut, uBuffer, 2 * nIn, &nOut, NULL);
}
CloseHandle(hIn);
CloseHandle(hOut);
return WriteOK;
}
ΠΡΠΎΠΈΠ·Π²ΠΎΠ΄ΠΈΡΠ΅Π»ΡΠ½ΠΎΡΡΡ ΠΏΡΠΎΠ³ΡΠ°ΠΌΠΌΡ
ΠΠ°ΠΊ ΠΏΠΎΠΊΠ°Π·Π°Π½ΠΎ Π² ΠΏΡΠΈΠ»ΠΎΠΆΠ΅Π½ΠΈΠΈ Π, ΠΏΡΠΎΠΈΠ·Π²ΠΎΠ΄ΠΈΡΠ΅Π»ΡΠ½ΠΎΡΡΡ ΠΏΡΠΎΠ³ΡΠ°ΠΌΠΌΡ ΠΏΡΠ΅ΠΎΠ±ΡΠ°Π·ΠΎΠ²Π°Π½ΠΈΡ ΡΠ°ΠΉΠ»ΠΎΠ² ΠΌΠΎΠΆΠ½ΠΎ ΠΏΠΎΠ²ΡΡΠΈΡΡ, ΠΏΡΠ΅Π΄ΠΎΡΡΠ°Π²ΠΈΠ² Π±ΡΡΠ΅Ρ Π±ΠΎΠ»ΡΡΠ΅Π³ΠΎ ΡΠ°Π·ΠΌΠ΅ΡΠ° ΠΈ Π·Π°Π΄Π°Π² ΡΠ»Π°Π³ FILE_FLAG_SEQUENTIAL_SCAN ΠΏΡΠΈ Π²ΡΠ·ΠΎΠ²Π΅ ΡΡΠ½ΠΊΡΠΈΠΈ CreateFile. Π ΠΏΡΠΈΠ»ΠΎΠΆΠ΅Π½ΠΈΠΈ Π ΡΠ°ΠΊΠΆΠ΅ ΡΡΠ°Π²Π½ΠΈΠ²Π°ΡΡΡΡ ΠΏΠΎΠΊΠ°Π·Π°ΡΠ΅Π»ΠΈ ΠΏΡΠΎΠΈΠ·Π²ΠΎΠ΄ΠΈΡΠ΅Π»ΡΠ½ΠΎΡΡΠΈ ΠΏΡΠΎΠ³ΡΠ°ΠΌΠΌΡ Π΄Π»Ρ ΡΠ°ΠΉΠ»ΠΎΠ²ΡΡ ΡΠΈΡΡΠ΅ΠΌ NTFS ΠΈ ΡΠ°ΡΠΏΡΠ΅Π΄Π΅Π»Π΅Π½Π½ΡΡ ΡΠ°ΠΉΠ»ΠΎΠ²ΡΡ ΡΠΈΡΡΠ΅ΠΌ.
Π£ΠΏΡΠ°Π²Π»Π΅Π½ΠΈΠ΅ ΡΠ°ΠΉΠ»Π°ΠΌΠΈ ΠΈ ΠΊΠ°ΡΠ°Π»ΠΎΠ³Π°ΠΌΠΈ
Π ΡΡΠΎΠΌ ΡΠ°Π·Π΄Π΅Π»Π΅ Π²Π²ΠΎΠ΄ΡΡΡΡ ΠΎΡΠ½ΠΎΠ²Π½ΡΠ΅ ΡΡΠ½ΠΊΡΠΈΠΈ, ΠΏΡΠ΅Π΄Π½Π°Π·Π½Π°ΡΠ΅Π½Π½ΡΠ΅ Π΄Π»Ρ ΡΠΏΡΠ°Π²Π»Π΅Π½ΠΈΡ ΡΠ°ΠΉΠ»Π°ΠΌΠΈ ΠΈ ΠΊΠ°ΡΠ°Π»ΠΎΠ³Π°ΠΌΠΈ.
Π£ΠΏΡΠ°Π²Π»Π΅Π½ΠΈΠ΅ ΡΠ°ΠΉΠ»Π°ΠΌΠΈ
ΠΠ»Ρ ΡΠΏΡΠ°Π²Π»Π΅Π½ΠΈΡ ΡΠ°ΠΉΠ»Π°ΠΌΠΈ Windows ΠΏΡΠ΅Π΄ΠΎΡΡΠ°Π²Π»ΡΠ΅Ρ ΡΠ΅Π»ΡΠΉ ΡΡΠ΄ ΡΡΠ½ΠΊΡΠΈΠΉ, ΡΠ°Π±ΠΎΡΠ° Ρ ΠΊΠΎΡΠΎΡΡΠΌΠΈ ΠΎΠ±ΡΡΠ½ΠΎ Π½Π΅ ΠΏΡΠ΅Π΄ΡΡΠ°Π²Π»ΡΠ΅Ρ ΡΠ»ΠΎΠΆΠ½ΠΎΡΡΠΈ. ΠΠΈΠΆΠ΅ ΠΎΠΏΠΈΡΠ°Π½Ρ ΡΡΠ½ΠΊΡΠΈΠΈ, Ρ ΠΏΠΎΠΌΠΎΡΡΡ ΠΊΠΎΡΠΎΡΡΡ ΠΌΠΎΠΆΠ½ΠΎ ΡΠ΄Π°Π»ΡΡΡ, ΠΊΠΎΠΏΠΈΡΠΎΠ²Π°ΡΡ ΠΈ ΠΏΠ΅ΡΠ΅ΠΈΠΌΠ΅Π½ΠΎΠ²ΡΠ²Π°ΡΡ ΡΠ°ΠΉΠ»Ρ. Π‘ΡΡΠ΅ΡΡΠ²ΡΠ΅Ρ ΡΠ°ΠΊΠΆΠ΅ ΡΡΠ½ΠΊΡΠΈΡ, ΠΏΡΠ΅Π΄Π½Π°Π·Π½Π°ΡΠ΅Π½Π½Π°Ρ Π΄Π»Ρ ΡΠΎΠ·Π΄Π°Π½ΠΈΡ ΠΈΠΌΠ΅Π½ Π²ΡΠ΅ΠΌΠ΅Π½Π½ΡΡ ΡΠ°ΠΉΠ»ΠΎΠ².
ΠΡΠΈ ΡΠ΄Π°Π»Π΅Π½ΠΈΠΈ ΡΠ°ΠΉΠ»Π° Π΄ΠΎΡΡΠ°ΡΠΎΡΠ½ΠΎ ΡΠΊΠ°Π·Π°ΡΡ Π΅Π³ΠΎ ΠΈΠΌΡ. ΠΡΠΏΠΎΠΌΠ½ΠΈΡΠ΅, ΡΡΠΎ Π²ΡΠ΅ ΠΏΠΎΠ»Π½ΡΠ΅ ΠΈΠΌΠ΅Π½Π° ΡΠ°ΠΉΠ»ΠΎΠ² Π½Π°ΡΠΈΠ½Π°ΡΡΡΡ Ρ Π±ΡΠΊΠ²Ρ Π΄ΠΈΡΠΊΠ° ΠΈΠ»ΠΈ ΠΈΠΌΠ΅Π½ΠΈ ΡΠ΅ΡΠ²Π΅ΡΠ°. ΠΡΠΊΡΡΡΡΠΉ ΡΠ°ΠΉΠ», Π²ΠΎΠΎΠ±ΡΠ΅ Π³ΠΎΠ²ΠΎΡΡ, ΡΠ΄Π°Π»ΠΈΡΡ Π½Π΅Π²ΠΎΠ·ΠΌΠΎΠΆΠ½ΠΎ (ΡΡΠΎ Π΄ΠΎΠΏΡΡΠΊΠ°Π΅ΡΡΡ Π² Windows 9x ΠΈ UNIX); ΠΏΠΎΠΏΡΡΠΊΠ° Π²ΡΠΏΠΎΠ»Π½Π΅Π½ΠΈΡ ΠΏΠΎΠ΄ΠΎΠ±Π½ΠΎΠΉ ΠΎΠΏΠ΅ΡΠ°ΡΠΈΠΈ Π·Π°ΠΊΠΎΠ½ΡΠΈΡΡΡ Π½Π΅ΡΠ΄Π°ΡΠ΅ΠΉ. Π£ ΡΠ°ΠΊΠΎΠ³ΠΎ ΠΎΠ³ΡΠ°Π½ΠΈΡΠ΅Π½ΠΈΡ Π΅ΡΡΡ ΡΠ²ΠΎΠΈ ΠΏΠΎΠ»ΠΎΠΆΠΈΡΠ΅Π»ΡΠ½ΡΠ΅ ΡΡΠΎΡΠΎΠ½Ρ, ΠΏΠΎΡΠΊΠΎΠ»ΡΠΊΡ ΠΎΠ½ΠΎ ΠΏΡΠ΅Π΄ΠΎΡΠ²ΡΠ°ΡΠ°Π΅Ρ ΡΠ»ΡΡΠ°ΠΉΠ½ΠΎΠ΅ ΡΠ΄Π°Π»Π΅Π½ΠΈΠ΅ ΠΎΡΠΊΡΡΡΡΡ ΡΠ°ΠΉΠ»ΠΎΠ².
BOOL DeleteFile(LPCTSTR lpFileName)
Π§ΡΠΎΠ±Ρ ΡΠΊΠΎΠΏΠΈΡΠΎΠ²Π°ΡΡ ΡΠ°ΠΉΠ» ΡΠ΅Π»ΠΈΠΊΠΎΠΌ, Π΄ΠΎΡΡΠ°ΡΠΎΡΠ½ΠΎ ΠΈΡΠΏΠΎΠ»ΡΠ·ΠΎΠ²Π°ΡΡ ΠΎΠ΄Π½Ρ ΡΡΠ½ΠΊΡΠΈΡ.
BOOL CopyFile(LPCTSTR lpExistingFileName, LPCTSTR lpNewFileName, BOOL fFailIfExists)
Π€ΡΠ½ΠΊΡΠΈΡ CopyFile ΠΊΠΎΠΏΠΈΡΡΠ΅Ρ ΡΡΡΠ΅ΡΡΠ²ΡΡΡΠΈΠΉ ΡΠ°ΠΉΠ» Ρ Π·Π°Π΄Π°Π½Π½ΡΠΌ ΠΈΠΌΠ΅Π½Π΅ΠΌ ΠΈ ΠΏΡΠΈΡΠ²Π°ΠΈΠ²Π°Π΅Ρ ΠΊΠΎΠΏΠΈΠΈ ΡΠΊΠ°Π·Π°Π½Π½ΠΎΠ΅ Π½ΠΎΠ²ΠΎΠ΅ ΠΈΠΌΡ. Π ΡΠ»ΡΡΠ°Π΅ ΡΡΡΠ΅ΡΡΠ²ΠΎΠ²Π°Π½ΠΈΡ ΡΠ°ΠΉΠ»Π° Ρ ΡΠ°ΠΊΠΈΠΌ ΠΆΠ΅ ΠΈΠΌΠ΅Π½Π΅ΠΌ ΠΎΠ½ Π±ΡΠ΄Π΅Ρ Π·Π°ΠΌΠ΅Π½Π΅Π½ Π½ΠΎΠ²ΡΠΌ ΡΠ°ΠΉΠ»ΠΎΠΌ ΡΠΎΠ»ΡΠΊΠΎ Π² ΡΠΎΠΌ ΡΠ»ΡΡΠ°Π΅, Π΅ΡΠ»ΠΈ Π·Π½Π°ΡΠ΅Π½ΠΈΠ΅ΠΌ ΠΏΠ°ΡΠ°ΠΌΠ΅ΡΡΠ° fFailIfExists ΡΠ²Π»ΡΠ΅ΡΡΡ FALSE.
ΠΠΎΠ΄ ΡΠΏΡΠ°Π²Π»Π΅Π½ΠΈΠ΅ΠΌ NT5 ΠΌΠΎΠΆΠ½ΠΎ ΡΠΎΠ·Π΄Π°ΡΡ ΠΆΠ΅ΡΡΠΊΡΡ ΡΡΡΠ»ΠΊΡ (hard link) Π΄Π»Ρ Π΄Π²ΡΡ ΡΠ°ΠΉΠ»ΠΎΠ², Π°Π½Π°Π»ΠΎΠ³ΠΈΡΠ½ΡΡ ΠΆΠ΅ΡΡΠΊΠΈΠΌ ΡΡΡΠ»ΠΊΠ°ΠΌ Π² UNIX, ΠΈΡΠΏΠΎΠ»ΡΠ·ΡΡ Π΄Π»Ρ ΡΡΠΎΠ³ΠΎ ΡΡΠ½ΠΊΡΠΈΡ CreateHardLink. ΠΠ΅ΡΡΠΊΠΈΠ΅ ΡΡΡΠ»ΠΊΠΈ Π΄Π΅Π»Π°ΡΡ Π²ΠΎΠ·ΠΌΠΎΠΆΠ½ΡΠΌ ΡΡΡΠ΅ΡΡΠ²ΠΎΠ²Π°Π½ΠΈΠ΅ ΡΠ°ΠΉΠ»Π° ΠΏΠΎΠ΄ Π΄Π²ΡΠΌΡ ΡΠ°Π·Π»ΠΈΡΠ½ΡΠΌΠΈ ΠΈΠΌΠ΅Π½Π°ΠΌΠΈ. ΠΠ°ΠΌΠ΅ΡΡΡΠ΅, ΡΡΠΎ Π² ΠΏΠΎΠ΄ΠΎΠ±Π½ΡΡ ΡΠ»ΡΡΠ°ΡΡ ΡΠ°ΠΉΠ» ΠΊΠ°ΠΊ ΡΠ°ΠΊΠΎΠ²ΠΎΠΉ ΡΡΡΠ΅ΡΡΠ²ΡΠ΅Ρ Π² Π΅Π΄ΠΈΠ½ΡΡΠ²Π΅Π½Π½ΠΎΠΌ ΡΠΈΡΠ»Π΅, ΠΈ ΠΏΠΎΡΡΠΎΠΌΡ ΠΌΠΎΠΆΠ½ΠΎ ΠΏΡΠΎΠΈΠ·Π²ΠΎΠ»ΡΠ½ΠΎ ΠΈΡΠΏΠΎΠ»ΡΠ·ΠΎΠ²Π°ΡΡ Π»ΡΠ±ΠΎΠ΅ ΠΈΠ· Π΅Π³ΠΎ ΠΈΠΌΠ΅Π½, Π½Π΅Π·Π°Π²ΠΈΡΠΈΠΌΠΎ ΠΎΡ ΡΠΎΠ³ΠΎ, ΠΊΠ°ΠΊΠΎΠ΅ ΠΈΠ· Π½ΠΈΡ Π±ΡΠ»ΠΎ ΠΈΡΠΏΠΎΠ»ΡΠ·ΠΎΠ²Π°Π½ΠΎ Π΄Π»Ρ ΠΎΡΠΊΡΡΡΠΈΡ ΡΠ°ΠΉΠ»Π°.
BOOL CreateHardLink(LPCTSTR lpFileName, LPCTSTR lpExistingFileName, BOOL lpSecurityAttributes)
ΠΠ²Π° ΠΏΠ΅ΡΠ²ΡΡ Π°ΡΠ³ΡΠΌΠ΅Π½ΡΠ° ΠΈΠΌΠ΅ΡΡ ΡΠΎΡ ΠΆΠ΅ ΡΠΌΡΡΠ», ΡΡΠΎ ΠΈ Π² ΡΡΠ½ΠΊΡΠΈΠΈ CopyFile, Ρ ΠΎΡΡ ΠΈ ΡΠ°ΡΠΏΠΎΠ»ΠΎΠΆΠ΅Π½Ρ Π² ΠΎΠ±ΡΠ°ΡΠ½ΠΎΠΌ ΠΏΠΎΡΡΠ΄ΠΊΠ΅. ΠΠ±Π° ΠΈΠΌΠ΅Π½ΠΈ ΡΠ°ΠΉΠ»Π°, Π½ΠΎΠ²ΠΎΠ΅ ΠΈ ΡΡΡΠ΅ΡΡΠ²ΡΡΡΠ΅Π΅, Π΄ΠΎΠ»ΠΆΠ½Ρ ΠΎΡΠ½ΠΎΡΠΈΡΡΡΡ ΠΊ ΠΎΠ΄Π½ΠΎΠΌΡ ΠΈ ΡΠΎΠΌΡ ΠΆΠ΅ ΡΠΎΠΌΡ ΡΠ°ΠΉΠ»ΠΎΠ²ΠΎΠΉ ΡΠΈΡΡΠ΅ΠΌΡ, Π½ΠΎ ΠΌΠΎΠ³ΡΡ ΡΠΎΠΎΡΠ²Π΅ΡΡΡΠ²ΠΎΠ²Π°ΡΡ ΡΠ°Π·Π»ΠΈΡΠ½ΡΠΌ ΠΊΠ°ΡΠ°Π»ΠΎΠ³Π°ΠΌ. ΠΡΡΠΈΠ±ΡΡΡ Π·Π°ΡΠΈΡΡ ΡΠ°ΠΉΠ»Π°, Π΅ΡΠ»ΠΈ ΡΠ°ΠΊΠΎΠ²ΡΠ΅ ΠΈΠΌΠ΅ΡΡΡΡ, ΠΏΡΠΈΠΌΠ΅Π½ΠΈΠΌΡ ΠΈ ΠΊ Π½ΠΎΠ²ΠΎΠΌΡ ΠΈΠΌΠ΅Π½ΠΈ ΡΠ°ΠΉΠ»Π°.
ΠΡΠ»ΠΈ Π·Π°Π³Π»ΡΠ½ΡΡΡ Π² Π΄ΠΎΠΊΡΠΌΠ΅Π½ΡΠ°ΡΠΈΡ Microsoft, ΡΠΎ ΠΌΠΎΠΆΠ½ΠΎ ΡΠ²ΠΈΠ΄Π΅ΡΡ, ΡΡΠΎ Π² ΡΡΡΡΠΊΡΡΡΠ΅ BY_HANDLE_FILE_INFO ΠΈΠΌΠ΅Π΅ΡΡΡ ΠΏΠΎΠ»Π΅ "ΠΊΠΎΠ»ΠΈΡΠ΅ΡΡΠ²ΠΎ ΡΡΡΠ»ΠΎΠΊ", ΠΈ ΠΈΠΌΠ΅Π½Π½ΠΎ ΡΡΠΎΡ ΡΡΠ΅ΡΡΠΈΠΊ ΠΈΡΠΏΠΎΠ»ΡΠ·ΡΠ΅ΡΡΡ Π΄Π»Ρ ΠΎΠΏΡΠ΅Π΄Π΅Π»Π΅Π½ΠΈΡ ΡΠΎΠ³ΠΎ, ΠΌΠΎΠΆΠ΅Ρ ΠΈΠ»ΠΈ Π½Π΅ ΠΌΠΎΠΆΠ΅Ρ Π±ΡΡΡ ΡΠ΄Π°Π»Π΅Π½ Π΄Π°Π½Π½ΡΠΉ ΡΠ°ΠΉΠ». Π€ΡΠ½ΠΊΡΠΈΡ DeleteFile ΡΠ΄Π°Π»ΡΠ΅Ρ ΠΈΠΌΡ ΠΈΠ· ΠΊΠ°ΡΠ°Π»ΠΎΠ³Π° ΡΠ°ΠΉΠ»ΠΎΠ²ΠΎΠΉ ΡΠΈΡΡΠ΅ΠΌΡ, Π½ΠΎ ΡΠ°ΠΌ ΡΠ°ΠΉΠ» Π½Π΅ ΠΌΠΎΠΆΠ΅Ρ Π±ΡΡΡ ΡΠ΄Π°Π»Π΅Π½ Π΄ΠΎ ΡΠ΅Ρ ΠΏΠΎΡ, ΠΏΠΎΠΊΠ° Π·Π½Π°ΡΠ΅Π½ΠΈΠ΅ ΡΡΠ΅ΡΡΠΈΠΊΠ° "ΠΊΠΎΠ»ΠΈΡΠ΅ΡΡΠ²ΠΎ ΡΡΡΠ»ΠΎΠΊ" Π½Π΅ ΡΡΠ°Π½Π΅Ρ ΡΠ°Π²Π½ΡΠΌ 0.
ΠΠΈΠ±ΠΊΠΈΡ ΡΡΡΠ»ΠΎΠΊ (soft link) Π² Windows Π½Π΅ ΡΡΡΠ΅ΡΡΠ²ΡΠ΅Ρ, Ρ ΠΎΡΡ ΠΎΠ±ΠΎΠ»ΠΎΡΠΊΠΈ Windows (Π½ΠΎ Π½Π΅ ΡΠ°ΠΌΠ° Windows), ΡΡΠΊΠΎΠ²ΠΎΠ΄ΡΡΠ²ΡΡΡΠΈΠ΅ΡΡ ΠΏΡΠΈ ΠΎΠΏΡΠ΅Π΄Π΅Π»Π΅Π½ΠΈΠΈ ΠΌΠ΅ΡΡΠΎΠΏΠΎΠ»ΠΎΠΆΠ΅Π½ΠΈΡ ΡΠ°ΠΉΠ»Π° Π΅Π³ΠΎ ΡΠΎΠ΄Π΅ΡΠΆΠΈΠΌΡΠΌ, ΠΏΠΎΠ΄Π΄Π΅ΡΠΆΠΈΠ²Π°ΡΡ ΡΡΠ»ΡΠΊΠΈ (shortcuts). Π―ΡΠ»ΡΠΊΠΈ ΠΏΡΠ΅Π΄ΠΎΡΡΠ°Π²Π»ΡΡΡ ΡΡΠ΅Π΄ΡΡΠ²Π°, ΠΏΠΎΠ΄ΠΎΠ±Π½ΡΠ΅ Π³ΠΈΠ±ΠΊΠΈΠΌ ΡΡΡΠ»ΠΊΠ°ΠΌ, Π½ΠΎ Π²ΠΎΡΠΏΠΎΠ»ΡΠ·ΠΎΠ²Π°ΡΡΡΡ ΠΈΠΌΠΈ ΠΌΠΎΠ³ΡΡ ΡΠΎΠ»ΡΠΊΠΎ ΠΏΠΎΠ»ΡΠ·ΠΎΠ²Π°ΡΠ΅Π»ΠΈ ΠΎΠ±ΠΎΠ»ΠΎΡΠΊΠΈ.
ΠΠΎΡΡΡΠΏΠ½Ρ Π΄Π²Π΅ ΡΡΠ½ΠΊΡΠΈΠΈ, ΠΏΠΎΠ·Π²ΠΎΠ»ΡΡΡΠΈΠ΅ ΠΏΠ΅ΡΠ΅ΠΈΠΌΠ΅Π½ΠΎΠ²ΡΠ²Π°ΡΡ, ΠΈΠ»ΠΈ "ΠΏΠ΅ΡΠ΅ΠΌΠ΅ΡΠ°ΡΡ", ΡΠ°ΠΉΠ». ΠΡΠΈ ΠΆΠ΅ ΡΡΠ½ΠΊΡΠΈΠΈ ΠΏΡΠΈΠΌΠ΅Π½ΠΈΠΌΡ ΠΈ ΠΊ ΠΊΠ°ΡΠ°Π»ΠΎΠ³Π°ΠΌ. (Π€ΡΠ½ΠΊΡΠΈΠΈ DeleteFile ΠΈ CopyFile ΠΌΠΎΠ³ΡΡ ΠΏΡΠΈΠΌΠ΅Π½ΡΡΡΡΡ ΡΠΎΠ»ΡΠΊΠΎ ΠΊ ΡΠ°ΠΉΠ»Π°ΠΌ.)
BOOL MoveFile(LPCTSTR lpExistingFileName, LPCTSTR lpNewFileName)
BOOL MoveFileEx(LPCTSTR lpExistingFileName, LPCTSTR lpNewFileName, DWORD dwFlags)
ΠΡΠ»ΠΈ Π½ΠΎΠ²ΡΠΉ ΡΠ°ΠΉΠ» ΡΠΆΠ΅ ΡΡΡΠ΅ΡΡΠ²ΡΠ΅Ρ, ΡΡΠ½ΠΊΡΠΈΡ MoveFile Π·Π°Π²Π΅ΡΡΠ°Π΅ΡΡΡ Ρ ΠΎΡΠΈΠ±ΠΊΠΎΠΉ; Π² ΡΡΠΎΠΌ ΡΠ»ΡΡΠ°Π΅ ΡΠ»Π΅Π΄ΡΠ΅Ρ ΠΈΡΠΏΠΎΠ»ΡΠ·ΠΎΠ²Π°ΡΡ ΡΡΠ½ΠΊΡΠΈΡ MoveFileEx. ΠΠ°ΠΌΠ΅ΡΡΡΠ΅, ΡΡΠΎ ΡΡΡΡΠΈΠΊΡ "ΠΡ " ΠΎΠ±ΡΡΠ½ΠΎ ΠΏΡΠΈΠΌΠ΅Π½ΡΠ΅ΡΡΡ Π΄Π»Ρ ΠΎΠ±ΠΎΠ·Π½Π°ΡΠ΅Π½ΠΈΡ ΡΡΠΎΠ²Π΅ΡΡΠ΅Π½ΡΡΠ²ΠΎΠ²Π°Π½Π½ΡΡ Π²Π΅ΡΡΠΈΠΉ ΡΡΠ½ΠΊΡΠΈΠΉ, ΠΎΠ±Π»Π°Π΄Π°ΡΡΠΈΡ ΡΠ°ΡΡΠΈΡΠ΅Π½Π½ΡΠΌΠΈ (extended) ΡΡΠ½ΠΊΡΠΈΠΎΠ½Π°Π»ΡΠ½ΡΠΌΠΈ Π²ΠΎΠ·ΠΌΠΎΠΆΠ½ΠΎΡΡΡΠΌΠΈ.
ΠΠ°ΡΠ°ΠΌΠ΅ΡΡΡlpExistingFileName β ΡΠΊΠ°Π·Π°ΡΠ΅Π»Ρ Π½Π° ΡΡΡΠΎΠΊΡ, ΡΠΎΠ΄Π΅ΡΠΆΠ°ΡΡΡ ΠΈΠΌΡ ΡΡΡΠ΅ΡΡΠ²ΡΡΡΠ΅Π³ΠΎ ΡΠ°ΠΉΠ»Π° ΠΈΠ»ΠΈ ΠΊΠ°ΡΠ°Π»ΠΎΠ³Π°.