#include <boost/filesystem/fstream.hpp>
using namespace std;
using namespace boost::filesystem;
int main(int argc, char** argv) {
// ΠΡΠΎΠ²Π΅ΡΠΈΡΡ ΠΏΠ°ΡΠ°ΠΌΠ΅ΡΡΡ...
try {
path p = complete(path(argv[1], native));
remove(p);
} catch (exception& e) {
cerr << e.what() << endl;
}
return(EXIT_SUCCESS);
}
ΠΠ°ΠΆΠ½ΡΡ ΡΠ°ΡΡΡ ΠΏΡΠΈΠΌΠ΅ΡΠ° 10.12 ΡΠΎΡΡΠ°Π²Π»ΡΠ΅Ρ ΡΡΠ½ΠΊΡΠΈΡ remove. ΠΡΠΈ Π΅Π΅ Π²ΡΠ·ΠΎΠ²Π΅ ΡΠ»Π΅Π΄ΡΠ΅Ρ Π·Π°Π΄Π°Π²Π°ΡΡ Π΄ΠΎΡΡΠΎΠ²Π΅ΡΠ½ΡΠΉ ΠΏΡΡΡ Π² Π°ΡΠ³ΡΠΌΠ΅Π½ΡΠ΅ path, ΠΊΠΎΡΠΎΡΡΠΉ ΡΡΡΠ»Π°Π΅ΡΡΡ Π½Π° ΡΠ°ΠΉΠ» ΠΈΠ»ΠΈ ΠΏΡΡΡΠΎΠΉ ΠΊΠ°ΡΠ°Π»ΠΎΠ³, ΠΈ ΠΎΠ½ΠΈ Π±ΡΠ΄ΡΡ ΡΠ΄Π°Π»Π΅Π½Ρ. ΠΠΎΡΡΠ½Π΅Π½ΠΈΡ ΠΏΠΎ ΠΊΠ»Π°ΡΡΡ path ΠΈ ΡΡΠ½ΠΊΡΠΈΠΈ complete (ΠΎΠ±Π° ΠΎΠ½ΠΈ Π²Ρ ΠΎΠ΄ΡΡ Π² Π±ΠΈΠ±Π»ΠΈΠΎΡΠ΅ΠΊΡ Boost Filesystem) ΠΏΡΠΈΠ²ΠΎΠ΄ΡΡΡΡ ΠΏΡΠΈ ΠΎΠ±ΡΡΠΆΠ΄Π΅Π½ΠΈΠΈ ΡΠ΅ΡΠ΅ΠΏΡΠ° 10.7. Π‘ΠΌ. ΡΠ΅ΡΠ΅ΠΏΡ 10.11, Π³Π΄Π΅ ΠΏΠΎΠΊΠ°Π·Π°Π½ ΠΏΡΠΈΠΌΠ΅Ρ ΡΠ΄Π°Π»Π΅Π½ΠΈΡ ΠΊΠ°ΡΠ°Π»ΠΎΠ³Π° ΠΈ Π²ΡΠ΅Ρ ΡΠΎΠ΄Π΅ΡΠΆΠ°ΡΠΈΡ ΡΡ Π² Π½Π΅ΠΌ ΡΠ°ΠΉΠ»ΠΎΠ².
ΠΠ΅ΡΠ΅ΠΈΠΌΠ΅Π½ΠΎΠ²Π°Π½ΠΈΠ΅ ΡΠ°ΠΉΠ»Π° ΠΈ ΠΊΠ°ΡΠ°Π»ΠΎΠ³Π° Π²ΡΠΏΠΎΠ»Π½ΡΠ΅ΡΡΡ Π°Π½Π°Π»ΠΎΠ³ΠΈΡΠ½ΠΎ. ΠΠ°ΠΌΠ΅Π½ΠΈΡΠ΅ ΠΏΡΠΎΠ³ΡΠ°ΠΌΠΌΠ½ΡΠΉ ΠΊΠΎΠ΄ Π² Π±Π»ΠΎΠΊΠ΅ try ΠΏΡΠΈΠΌΠ΅ΡΠ° 10.12 ΡΠ»Π΅Π΄ΡΡΡΠΈΠΌ ΠΊΠΎΠ΄ΠΎΠΌ.
path src = complete(path(argv[1], native));
path dst = complete(path(argv[2], native));
rename(src, dst);
Π ΡΠ΅Π·ΡΠ»ΡΡΠ°ΡΠ΅ src Π±ΡΠ΄Π΅Ρ ΠΏΠ΅ΡΠ΅ΠΈΠΌΠ΅Π½ΠΎΠ²Π°Π½ Π² dst ΠΏΡΠΈ ΡΡΠ»ΠΎΠ²ΠΈΠΈ, ΡΡΠΎ ΠΎΠ±Π° ΠΎΠ½ΠΈ ΡΠΎΠ΄Π΅ΡΠΆΠ°Ρ Π΄ΠΎΡΡΠΎΠ²Π΅ΡΠ½ΡΠ΅ ΠΏΡΡΠΈ, src ΠΈ dst Π½Π΅ ΠΎΠ±ΡΠ·Π°Π½Ρ ΠΈΠΌΠ΅ΡΡ ΠΎΠ±ΡΠΈΠΉ ΠΊΠ°ΡΠ°Π»ΠΎΠ³, ΠΈ Π² ΡΡΠΎΠΌ ΡΠΌΡΡΠ»Π΅ ΡΡΠ½ΠΊΡΠΈΡ ΠΏΠ΅ΡΠ΅ΠΈΠΌΠ΅Π½ΠΎΠ²Π°Π½ΠΈΡ ΡΠ°ΠΊΡΠΈΡΠ΅ΡΠΊΠΈ ΠΏΠ΅ΡΠ΅ΠΌΠ΅ΡΠ°Π΅Ρ ΡΠ°ΠΉΠ» ΠΈΠ»ΠΈ ΠΊΠ°ΡΠ°Π»ΠΎΠ³ Π² Π½ΠΎΠ²ΡΠΉ Π±Π°Π·ΠΎΠ²ΡΠΉ ΠΊΠ°ΡΠ°Π»ΠΎΠ³ ΠΏΡΠΈ ΡΡΠ»ΠΎΠ²ΠΈΠΈ, ΡΡΠΎ ΠΏΡΡΡ dst ΡΡΡΠ΅ΡΡΠ²ΡΠ΅Ρ.
Π‘ΠΌΠΎΡΡΠΈ ΡΠ°ΠΊΠΆΠ΅Π Π΅ΡΠ΅ΠΏΡ 10.7.
10.9. Π‘ΠΎΠ·Π΄Π°Π½ΠΈΠ΅ Π²ΡΠ΅ΠΌΠ΅Π½Π½ΠΎΠ³ΠΎ ΠΈΠΌΠ΅Π½ΠΈ ΡΠ°ΠΉΠ»Π° ΠΈ Π²ΡΠ΅ΠΌΠ΅Π½Π½ΠΎΠ³ΠΎ ΡΠ°ΠΉΠ»Π°
Π’ΡΠ΅Π±ΡΠ΅ΡΡΡ Π²ΡΠ΅ΠΌΠ΅Π½Π½ΠΎ ΡΠΎΡ ΡΠ°Π½ΠΈΡΡ Π½Π° Π΄ΠΈΡΠΊΠ΅ Π½Π΅ΠΊΠΎΡΠΎΡΡΠ΅ Π΄Π°Π½Π½ΡΠ΅, ΠΈ Π²Π°ΠΌ Π½Π΅ Ρ ΠΎΡΠ΅ΡΡΡ ΠΏΠΈΡΠ°ΡΡ ΡΠ°ΠΌΠΎΠΌΡ ΠΏΡΠΎΠ³ΡΠ°ΠΌΠΌΡ, ΠΊΠΎΡΠΎΡΠ°Ρ Π³Π΅Π½Π΅ΡΠΈΡΡΠ΅Ρ ΡΠ½ΠΈΠΊΠ°Π»ΡΠ½ΡΠ΅ ΠΈΠΌΠ΅Π½Π°.
Π Π΅ΡΠ΅Π½ΠΈΠ΅ΠΡΠΏΠΎΠ»ΡΠ·ΡΠΉΡΠ΅ ΡΡΠ½ΠΊΡΠΈΡ tmpfile ΠΈΠ»ΠΈ tmpnam, ΠΊΠΎΡΠΎΡΡΠ΅ ΠΎΠ±ΡΡΠ²Π»Π΅Π½Ρ Π² <cstdio>. tmpfile Π²ΠΎΠ·Π²ΡΠ°ΡΠ°Π΅Ρ FILE*, ΠΊΠΎΡΠΎΡΡΠΉ ΡΠΆΠ΅ ΠΎΡΠΊΡΡΡ Π½Π° Π·Π°ΠΏΠΈΡΡ, a tmpnam Π³Π΅Π½Π΅ΡΠΈΡΡΠ΅Ρ ΡΠ½ΠΈΠΊΠ°Π»ΡΠ½ΠΎΠ΅ ΠΈΠΌΡ ΡΠ°ΠΉΠ»Π°, ΠΊΠΎΡΠΎΡΠΎΠ΅ Π²Ρ ΠΌΠΎΠΆΠ΅ΡΠ΅ ΡΠ°ΠΌΠΈ ΠΎΡΠΊΡΡΡΡ. ΠΡΠΈΠΌΠ΅Ρ 10.13 ΠΏΠΎΠΊΠ°Π·ΡΠ²Π°Π΅Ρ, ΠΊΠ°ΠΊ ΠΌΠΎΠΆΠ½ΠΎ ΠΈΡΠΏΠΎΠ»ΡΠ·ΠΎΠ²Π°ΡΡ ΡΡΠ½ΠΊΡΠΈΡ tmpfile.
ΠΡΠΈΠΌΠ΅Ρ 10.13. Π‘ΠΎΠ·Π΄Π°Π½ΠΈΠ΅ Π²ΡΠ΅ΠΌΠ΅Π½Π½ΠΎΠ³ΠΎ ΡΠ°ΠΉΠ»Π°
#include <iostream>
#include <cstdio>
int main() {
FILE* pf = NULL;
char buf[256];
pf = tmpfile(); // Π‘ΠΎΠ·Π΄Π°ΡΡ ΠΈ ΠΎΡΠΊΡΡΡΡ Π²ΡΠ΅ΠΌΠ΅Π½Π½ΡΠΉ ΡΠ°ΠΉΠ»
if (pf) {
fputs("This is a temp file", pf); // ΠΠ°ΠΏΠΈΡΠ°ΡΡ Π² Π½Π΅Π³ΠΎ Π½Π΅ΠΊΠΎΡΠΎΡΡΠ΅ Π΄Π°Π½Π½ΡΠ΅
}
fseek(pf, 5, SEEK_SET); // ΠΠΎΡΡΡΠ°Π½ΠΎΠ²ΠΈΡΡ ΠΏΠΎΠ·ΠΈΡΠΈΡ Π² ΡΠ°ΠΉΠ»Π΅
fgets(buf, 255, pf); // Π‘ΡΠΈΡΠ°ΡΡ ΠΎΡΡΡΠ΄Π° ΡΡΡΠΎΠΊΡ
fclose(pf);
std:cout << buf << '\n';
}
ΠΠ±ΡΡΠΆΠ΄Π΅Π½ΠΈΠ΅Π‘ΠΎΠ·Π΄Π°ΡΡ Π²ΡΠ΅ΠΌΠ΅Π½Π½ΡΠΉ ΡΠ°ΠΉΠ» ΠΌΠΎΠΆΠ½ΠΎ Π΄Π²ΡΠΌΡ ΡΠΏΠΎΡΠΎΠ±Π°ΠΌΠΈ; Π² ΠΏΡΠΈΠΌΠ΅ΡΠ΅ 10.13 ΠΏΠΎΠΊΠ°Π·Π°Π½ ΠΎΠ΄ΠΈΠ½ ΠΈΠ· Π½ΠΈΡ . Π€ΡΠ½ΠΊΡΠΈΡ tmpfile ΠΎΠ±ΡΡΠ²Π»ΡΠ΅ΡΡΡ Π² <cstdio>; ΠΎΠ½Π° Π½Π΅ ΠΈΠΌΠ΅Π΅Ρ ΠΏΠ°ΡΠ°ΠΌΠ΅ΡΡΠΎΠ² ΠΈ Π²ΠΎΠ·Π²ΡΠ°ΡΠ°Π΅Ρ FILE* ΠΏΡΠΈ ΡΡΠΏΠ΅ΡΠ½ΠΎΠΌ Π·Π°Π²Π΅ΡΡΠ΅Π½ΠΈΠΈ ΠΈ NULL Π² ΠΏΡΠΎΡΠΈΠ²Π½ΠΎΠΌ ΡΠ»ΡΡΠ°Π΅. FILE* β ΡΡΠΎ ΡΠΎΡ ΠΆΠ΅ ΡΠ°ΠΌΡΠΉ ΡΠΈΠΏ, ΠΊΠΎΡΠΎΡΡΠΉ ΠΌΠΎΠΆΠ΅Ρ ΠΈΡΠΏΠΎΠ»ΡΠ·ΠΎΠ²Π°ΡΡΡΡ ΡΡΠ½ΠΊΡΠΈΡΠΌΠΈ Π‘, ΠΎΠ±Π΅ΡΠΏΠ΅ΡΠΈΠ²Π°ΡΡΠΈΠΌΠΈ Π²Π²ΠΎΠ΄-Π²ΡΠ²ΠΎΠ΄; fread, fwrite, fgets, puts ΠΈ Ρ.Π΄. tmpfile ΠΎΡΠΊΡΡΠ²Π°Π΅Ρ Π²ΡΠ΅ΠΌΠ΅Π½Π½ΡΠΉ ΡΠ°ΠΉΠ» Π² ΡΠ΅ΠΆΠΈΠΌΠ΅ Β«wb+Β» β ΡΡΠΎ ΠΎΠ·Π½Π°ΡΠ°Π΅Ρ, ΡΡΠΎ Π²Ρ ΠΌΠΎΠΆΠ΅ΡΠ΅ Π·Π°ΠΏΠΈΡΡΠ²Π°ΡΡ Π² Π½Π΅Π³ΠΎ ΠΈΠ»ΠΈ ΡΡΠΈΡΡΠ²Π°ΡΡ Π΅Π³ΠΎ Π² Π΄Π²ΠΎΠΈΡΠ½ΠΎΠΌ ΡΠ΅ΠΆΠΈΠΌΠ΅ (Ρ.Π΅. ΠΏΡΠΈ ΡΡΠ΅Π½ΠΈΠΈ ΡΠΈΠΌΠ²ΠΎΠ»Ρ Π½ΠΈΠΊΠ°ΠΊ ΡΠΏΠ΅ΡΠΈΠ°Π»ΡΠ½ΠΎ Π½Π΅ ΠΈΠ½ΡΠ΅ΡΠΏΡΠ΅ΡΠΈΡΡΡΡΡΡ) ΠΠΎΡΠ»Π΅ Π½ΠΎΡΠΌΠ°Π»ΡΠ½ΠΎΠ³ΠΎ Π·Π°Π²Π΅ΡΡΠ΅Π½ΠΈΡ ΡΠ°Π±ΠΎΡΡ ΠΏΡΠΎΠ³ΡΠ°ΠΌΠΌΡ Π²ΡΠ΅ΠΌΠ΅Π½Π½ΡΠΉ ΡΠ°ΠΉΠ», ΡΠΎΠ·Π΄Π°Π½Π½ΡΠΉ ΡΡΠ½ΠΊΡΠΈΠ΅ΠΉ tmpfile, Π°Π²ΡΠΎΠΌΠ°ΡΠΈΡΠ΅ΡΠΊΠΈ ΡΠ΄Π°Π»ΡΠ΅ΡΡΡ.
Π’Π°ΠΊΠΎΠΉ ΠΏΠΎΠ΄Ρ ΠΎΠ΄ ΠΌΠΎΠΆΠ΅Ρ ΠΊΠ°ΠΊ ΠΏΠΎΠ΄ΠΎΠΉΡΠΈ, ΡΠ°ΠΊ ΠΈ Π½Π΅ ΠΏΠΎΠ΄ΠΎΠΉΡΠΈ Π΄Π»Ρ Π²Π°Ρ β Π²ΡΠ΅ Π·Π°Π²ΠΈΡΠΈΡ ΠΎΡ ΡΠΎΠ³ΠΎ, ΡΡΠΎ Π²Ρ Ρ ΠΎΡΠΈΡΠ΅ Π΄Π΅Π»Π°ΡΡ. ΠΠ°ΠΌΠ΅ΡΠΈΠ², ΡΡΠΎ tmpfile Π½Π΅ ΠΏΡΠ΅Π΄ΠΎΡΡΠ°Π²Π»ΡΠ΅Ρ ΠΈΠΌΠ΅Π½ΠΈ ΡΠ°ΠΉΠ»Π°, Π²Ρ ΡΠΏΡΠΎΡΠΈΡΠ΅, ΠΊΠ°ΠΊ ΠΌΠΎΠΆΠ½ΠΎ ΠΏΠ΅ΡΠ΅Π΄Π°ΡΡ Π΅Π³ΠΎ Π΄ΡΡΠ³ΠΎΠΉ ΠΏΡΠΎΠ³ΡΠ°ΠΌΠΌΠ΅? Π ΡΡΠΎΠΌ ΡΠ»ΡΡΠ°Π΅ Π½ΠΈΠΊΠ°ΠΊ; Π²Π°ΠΌ ΠΏΠΎΡΡΠ΅Π±ΡΠ΅ΡΡΡ Π²ΠΌΠ΅ΡΡΠΎ ΡΡΠΎΠΉ ΡΡΠ½ΠΊΡΠΈΠΈ ΠΈΡΠΏΠΎΠ»ΡΠ·ΠΎΠ²Π°ΡΡ Π°Π½Π°Π»ΠΎΠ³ΠΈΡΠ½ΡΡ Ρ ΠΈΠΌΠ΅Π½Π΅ΠΌ tmpnam.
tmpnam Π½Π° ΡΠ°ΠΌΠΎΠΌ Π΄Π΅Π»Π΅ Π½Π΅ ΡΠΎΠ·Π΄Π°Π΅Ρ Π²ΡΠ΅ΠΌΠ΅Π½Π½ΡΠΉ ΡΠ°ΠΉΠ», ΠΎΠ½Π° ΠΏΡΠΎΡΡΠΎ ΡΠΎΠ·Π΄Π°Π΅Ρ ΡΠ½ΠΈΠΊΠ°Π»ΡΠ½ΠΎΠ΅ ΠΈΠΌΡ ΡΠ°ΠΉΠ»Π°, ΠΊΠΎΡΠΎΡΠΎΠ΅ Π²Ρ ΠΌΠΎΠΆΠ΅ΡΠ΅ ΠΈΡΠΏΠΎΠ»ΡΠ·ΠΎΠ²Π°ΡΡ ΠΏΡΠΈ ΠΎΡΠΊΡΡΡΠΈΠΈ ΡΠ°ΠΉΠ»Π°, tmpnam ΠΏΡΠΈΠ½ΠΈΠΌΠ°Π΅Ρ Π΅Π΄ΠΈΠ½ΡΡΠ²Π΅Π½Π½ΡΠΉ ΠΏΠ°ΡΠ°ΠΌΠ΅ΡΡ ΡΠΈΠΏΠ° char* ΠΈ Π²ΠΎΠ·Π²ΡΠ°ΡΠ°Π΅Ρ Π·Π½Π°ΡΠ΅Π½ΠΈΠ΅ ΡΠΈΠΏΠ° char*. ΠΡ ΠΌΠΎΠΆΠ΅ΡΠ΅ ΠΏΠ΅ΡΠ΅Π΄Π°ΡΡ ΡΠΊΠ°Π·Π°ΡΠ΅Π»Ρ Π½Π° Π±ΡΡΠ΅Ρ ΡΠΈΠΌΠ²ΠΎΠ»ΠΎΠ² char (ΠΎΠ½ Π΄ΠΎΠ»ΠΆΠ΅Π½ Π±ΡΡΡ, ΠΏΠΎ ΠΊΡΠ°ΠΉΠ½Π΅ΠΉ ΠΌΠ΅ΡΠ΅, Π½Π΅ ΠΌΠ΅Π½ΡΡΠ΅ Π·Π½Π°ΡΠ΅Π½ΠΈΡ ΠΌΠ°ΠΊΡΠΎΠΏΠ΅ΡΠ΅ΠΌΠ΅Π½Π½ΠΎΠΉ L_tmpnam, ΡΠ°ΠΊΠΆΠ΅ ΠΎΠΏΡΠ΅Π΄Π΅Π»Π΅Π½Π½ΠΎΠΉ Π² <cstdio>), ΠΊΡΠ΄Π° tmpnam ΡΠΊΠΎΠΏΠΈΡΡΠ΅Ρ ΠΈΠΌΡ Π²ΡΠ΅ΠΌΠ΅Π½Π½ΠΎΠ³ΠΎ ΡΠ°ΠΉΠ»Π° ΠΈ Π²ΠΎΠ·Π²ΡΠ°ΡΠΈΡ ΡΠΊΠ°Π·Π°ΡΠ΅Π»Ρ Π½Π° ΡΠΎΡ ΠΆΠ΅ ΡΠ°ΠΌΡΠΉ Π±ΡΡΠ΅Ρ. ΠΡΠ»ΠΈ Π²Ρ ΠΏΠ΅ΡΠ΅Π΄Π°Π΄ΠΈΡΠ΅ NULL, tmpfile Π²ΠΎΠ·Π²ΡΠ°ΡΠΈΡ ΡΠΊΠ°Π·Π°ΡΠ΅Π»Ρ Π½Π° ΡΡΠ°ΡΠΈΡΠ΅ΡΠΊΠΈΠΉ Π±ΡΡΠ΅Ρ, ΡΠΎΠ΄Π΅ΡΠΆΠ°ΡΠΈΠΉ ΡΡΠΎ ΠΈΠΌΡ ΡΠ°ΠΉΠ»Π°, ΡΡΠΎ ΠΎΠ·Π½Π°ΡΠ°Π΅Ρ Π΅Π³ΠΎ ΠΏΠ΅ΡΠ΅Π·Π°ΠΏΠΈΡΡ ΠΏΠΎΡΠ»Π΅Π΄ΡΡΡΠΈΠΌΠΈ Π²ΡΠ·ΠΎΠ²Π°ΠΌΠΈ tmpnam. (Π‘ΠΌ. ΠΏΡΠΈΠΌΠ΅Ρ 10.14.)
ΠΡΠΈΠΌΠ΅Ρ 10.14. Π‘ΠΎΠ·Π΄Π°Π½ΠΈΠ΅ ΠΈΠΌΠ΅Π½ΠΈ Π²ΡΠ΅ΠΌΠ΅Π½Π½ΠΎΠ³ΠΎ ΡΠ°ΠΉΠ»Π°
#include <iostream>
#include <fstream>
#include <cstdio>
#include <string>
int main() {
char* pFileName = NULL;
pFileName = tmpnam(NULL);
// ΠΠ΄Π΅ΡΡ Π΄ΡΡΠ³Π°Ρ ΠΏΡΠΎΠ³ΡΠ°ΠΌΠΌΠ° ΠΌΠΎΠΆΠ΅Ρ ΠΏΠΎΠ»ΡΡΠΈΡΡ ΡΠΎ ΠΆΠ΅ ΡΠ°ΠΌΠΎΠ΅ ΠΈΠΌΡ Π²ΡΠ΅ΠΌΠ΅Π½Π½ΠΎΠ³ΠΎ
// ΡΠ°ΠΉΠ»Π°.
if (!pFileName) {
std::cerr << "Couldn't create temp file name.\n";
return(EXIT_FAILURE);
}
std::cout << "The temp file name is: " << pFileName << '\n';
std::ofstream of(pFileName);
if (of) {
of << "Here is some temp data.";
of.close();
}
std::ifstream ifs(pFileName);
std::string s;
if (ifs) {
ifs >> s;
std::cout << "Just read in \"" << s << "\"\n";
ifs.close();
}
}
ΠΠ΄Π½Π°ΠΊΠΎ ΠΎΠ΄Π½Ρ Π²Π°ΠΆΠ½ΡΡ ΠΎΡΠΎΠ±Π΅Π½Π½ΠΎΡΡΡ Π½Π΅ΠΎΠ±Ρ ΠΎΠ΄ΠΈΠΌΠΎ Π·Π½Π°ΡΡ ΠΎ ΡΡΠ½ΠΊΡΠΈΠΈ tmpnam. ΠΠΎΠΆΠ΅Ρ Π²ΠΎΠ·Π½ΠΈΠΊΠ½ΡΡΡ ΡΡΠ»ΠΎΠ²ΠΈΠ΅ ΡΠΎΡΡΡΠ·Π°Π½ΠΈΡ, ΠΊΠΎΠ³Π΄Π° Π½Π΅ΡΠΊΠΎΠ»ΡΠΊΠΎ ΠΏΡΠΎΡΠ΅ΡΡΠΎΠ² ΠΌΠΎΠ³ΡΡ Π³Π΅Π½Π΅ΡΠΈΡΠΎΠ²Π°ΡΡ ΠΎΠ΄ΠΈΠ½Π°ΠΊΠΎΠ²ΠΎΠ΅ ΠΈΠΌΡ ΡΠ°ΠΉΠ»Π°, Π΅ΡΠ»ΠΈ ΠΎΠ΄ΠΈΠ½ ΠΏΡΠΎΡΠ΅ΡΡ Π²ΡΠ·ΡΠ²Π°Π΅Ρ tmpname, Π° Π΄ΡΡΠ³ΠΎΠΉ Π²ΡΠ·ΡΠ²Π°Π΅Ρ tmpname Π΄ΠΎ ΡΠΎΠ³ΠΎ, ΠΊΠ°ΠΊ ΠΏΠ΅ΡΠ²ΡΠΉ ΠΏΡΠΎΡΠ΅ΡΡ ΠΎΡΠΊΡΠΎΠ΅Ρ ΡΡΠΎΡ ΡΠ°ΠΉΠ». ΠΡΠΎ ΠΏΠ»ΠΎΡ ΠΎ ΠΏΠΎ Π΄Π²ΡΠΌ ΠΏΡΠΈΡΠΈΠ½Π°ΠΌ. ΠΠΎ-ΠΏΠ΅ΡΠ²ΡΡ , Π½Π°ΠΏΠΈΡΠ°Π½Π½Π°Ρ Π·Π»ΠΎΡΠΌΡΡΠ»Π΅Π½Π½ΠΈΠΊΠΎΠΌ ΠΏΡΠΎΠ³ΡΠ°ΠΌΠΌΠ° ΠΌΠΎΠΆΠ΅Ρ Π΄Π΅Π»Π°ΡΡ ΡΡΠΎ Π΄Π»Ρ ΠΏΠ΅ΡΠ΅Ρ Π²Π°ΡΠ° Π΄Π°Π½Π½ΡΡ Π²ΡΠ΅ΠΌΠ΅Π½Π½ΠΎΠ³ΠΎ ΡΠ°ΠΉΠ»Π°, ΠΈ, Π²ΠΎ-Π²ΡΠΎΡΡΡ , Π½ΠΈ ΠΎ ΡΠ΅ΠΌ Π½Π΅ ΠΏΠΎΠ΄ΠΎΠ·ΡΠ΅Π²Π°ΡΡΠ°Ρ ΠΏΡΠΎΠ³ΡΠ°ΠΌΠΌΠ° ΠΌΠΎΠΆΠ΅Ρ ΠΏΠΎΠ»ΡΡΠΈΡΡ ΡΠΎ ΠΆΠ΅ ΡΠ°ΠΌΠΎΠ΅ ΠΈΠΌΡ ΡΠ°ΠΉΠ»Π° ΠΈ ΠΏΡΠΎΡΡΠΎ ΠΈΡΠΏΠΎΡΡΠΈΡΡ ΠΈΠ»ΠΈ ΡΠ΄Π°Π»ΠΈΡΡ Π΄Π°Π½Π½ΡΠ΅.
10.10. Π‘ΠΎΠ·Π΄Π°Π½ΠΈΠ΅ ΠΊΠ°ΡΠ°Π»ΠΎΠ³Π°
Π’ΡΠ΅Π±ΡΠ΅ΡΡΡ ΡΠΎΠ·Π΄Π°ΡΡ ΠΊΠ°ΡΠ°Π»ΠΎΠ³, ΠΏΡΠΈΡΠ΅ΠΌ ΡΡΠ° ΠΎΠΏΠ΅ΡΠ°ΡΠΈΡ Π΄ΠΎΠ»ΠΆΠ½Π° Π±ΡΡΡ ΠΏΠ΅ΡΠ΅Π½ΠΎΡΠΈΠΌΠΎΠΉ, Ρ.Π΅. Π² Π½Π΅ΠΉ Π½Π΅ Π΄ΠΎΠ»ΠΆΠ΅Π½ ΠΈΡΠΏΠΎΠ»ΡΠ·ΠΎΠ²Π°ΡΡΡΡ ΡΠΏΠ΅ΡΠΈΡΠΈΡΠ½ΡΠΉ Π΄Π»Ρ ΠΊΠΎΠ½ΠΊΡΠ΅ΡΠ½ΠΎΠΉ ΠΠ‘ ΠΏΡΠΎΠ³ΡΠ°ΠΌΠΌΠ½ΡΠΉ ΠΈΠ½ΡΠ΅ΡΡΠ΅ΠΉΡ.
Π Π΅ΡΠ΅Π½ΠΈΠ΅ΠΠ° Π±ΠΎΠ»ΡΡΠΈΠ½ΡΡΠ²Π΅ ΠΏΠ»Π°ΡΡΠΎΡΠΌ Π²Ρ ΡΠΌΠΎΠΆΠ΅ΡΠ΅ ΠΈΡΠΏΠΎΠ»ΡΠ·ΠΎΠ²Π°ΡΡ ΡΠΈΡΡΠ΅ΠΌΠ½ΡΠΉ Π²ΡΠ·ΠΎΠ² mkdir, ΠΊΠΎΡΠΎΡΡΠΉ Π²Ρ ΠΎΠ΄ΠΈΡ Π² ΡΠΎΡΡΠ°Π² Π±ΠΎΠ»ΡΡΠΈΠ½ΡΡΠ²Π° ΠΊΠΎΠΌΠΏΠΈΠ»ΡΡΠΎΡΠΎΠ² ΠΈ ΡΠΎΠ΄Π΅ΡΠΆΠΈΡΡΡ Π² Π·Π°Π³ΠΎΠ»ΠΎΠ²ΠΎΡΠ½ΡΡ ΡΠ°ΠΉΠ»Π°Ρ C-ΡΡΠ½ΠΊΡΠΈΠΉ. ΠΠ½ ΠΈΠΌΠ΅Π΅Ρ ΡΠ°Π·Π½ΡΠΉ Π²ΠΈΠ΄ Π² ΡΠ°Π·Π»ΠΈΡΠ½ΡΡ ΠΠ‘, Π½ΠΎ ΡΠ΅ΠΌ Π½Π΅ ΠΌΠ΅Π½Π΅Π΅ Π²Ρ ΠΌΠΎΠΆΠ΅ΡΠ΅ Π΅Π³ΠΎ ΠΈΡΠΏΠΎΠ»ΡΠ·ΠΎΠ²Π°ΡΡ Π΄Π»Ρ ΡΠΎΠ·Π΄Π°Π½ΠΈΡ Π½ΠΎΠ²ΠΎΠ³ΠΎ ΠΊΠ°ΡΠ°Π»ΠΎΠ³Π°. Π‘ΡΠ°Π½Π΄Π°ΡΡΠ½ΡΠΌΠΈ ΡΡΠ΅Π΄ΡΡΠ²Π°ΠΌΠΈ C++ Π½Π΅Π»ΡΠ·Ρ ΠΎΠ±Π΅ΡΠΏΠ΅ΡΠΈΡΡ ΠΏΠ΅ΡΠ΅Π½ΠΎΡΠΈΠΌΡΠΉ ΡΠΏΠΎΡΠΎΠ± ΡΠΎΠ·Π΄Π°Π½ΠΈΡ ΠΊΠ°ΡΠ°Π»ΠΎΠ³Π°. Π ΡΡΠΎΠΌ Π²Ρ ΠΌΠΎΠΆΠ΅ΡΠ΅ ΡΠ±Π΅Π΄ΠΈΡΡΡΡ Π½Π° ΠΏΡΠΈΠΌΠ΅ΡΠ΅ 10.15.
ΠΡΠΈΠΌΠ΅Ρ 10.15. Π‘ΠΎΠ·Π΄Π°Π½ΠΈΠ΅ ΠΊΠ°ΡΠ°Π»ΠΎΠ³Π°
#include <iostream>
#include <direct.h>
int main(int argc, char** argv) {
if (argc < 2) {
std::cerr << "Usage: " << argv[0] << " [new dir name]\n";
return(EXIT_FAILURE);
}
if (mkdir(argv[1]) == -1) { // Π‘ΠΎΠ·Π²Π°ΡΡ ΠΊΠ°ΡΠ°Π»ΠΎΠ³
std::cerr << "Error: " << strerror(errno);
return(EXIT_FAILURE);
}
}
ΠΠ±ΡΡΠΆΠ΄Π΅Π½ΠΈΠ΅Π‘ΠΈΡΡΠ΅ΠΌΠ½ΡΠ΅ Π²ΡΠ·ΠΎΠ²Ρ ΠΏΠΎ ΡΠΎΠ·Π΄Π°Π½ΠΈΡ ΠΊΠ°ΡΠ°Π»ΠΎΠ³ΠΎΠ² ΡΠ»Π΅Π³ΠΊΠ° ΠΎΡΠ»ΠΈΡΠ°ΡΡΡΡ Π² ΡΠ°Π·Π»ΠΈΡΠ½ΡΡ ΠΠ‘, Π½ΠΎ ΠΏΡΡΡΡ ΡΡΠΎ Π²Π°Ρ Π½Π΅ ΠΎΡΡΠ°Π½Π°Π²Π»ΠΈΠ²Π°Π΅Ρ β ΠΈΡ Π²ΡΠ΅ ΠΆΠ΅ ΡΠ»Π΅Π΄ΡΠ΅Ρ ΠΈΡΠΏΠΎΠ»ΡΠ·ΠΎΠ²Π°ΡΡ. Π Π±ΠΎΠ»ΡΡΠΈΠ½ΡΡΠ²Π΅ ΡΠΈΡΡΠ΅ΠΌ ΠΏΠΎΠ΄Π΄Π΅ΡΠΆΠΈΠ²Π°ΡΡΡΡ ΡΠ°Π·Π»ΠΈΡΠ½ΡΠ΅ Π²Π°ΡΠΈΠ°Π½ΡΡ Π²ΡΠ·ΠΎΠ²Π° mkdir, ΠΏΠΎΡΡΠΎΠΌΡ Π΄Π»Ρ ΡΠΎΠ·Π΄Π°Π½ΠΈΡ ΠΊΠ°ΡΠ°Π»ΠΎΠ³Π° Π΄ΠΎΡΡΠ°ΡΠΎΡΠ½ΠΎ ΠΏΡΠΎΡΡΠΎ Π·Π½Π°ΡΡ, ΠΊΠ°ΠΊΠΎΠΉ Π²ΠΊΠ»ΡΡΠ°ΡΡ Π·Π°Π³ΠΎΠ»ΠΎΠ²ΠΎΡΠ½ΡΠΉ ΡΠ°ΠΉΠ» ΠΈ ΠΊΠ°ΠΊ Π²ΡΠ³Π»ΡΠ΄ΠΈΡ ΡΠΈΠ³Π½Π°ΡΡΡΠ° ΡΡΠ½ΠΊΡΠΈΠΈ.
ΠΡΠΈΠΌΠ΅Ρ 10.15 ΡΠ°Π±ΠΎΡΠ°Π΅Ρ Π² ΡΠΈΡΡΠ΅ΠΌΠ°Ρ Windows, Π½ΠΎ Π½Π΅ Π² Unix. Π Windows mkdir ΠΎΠ±ΡΡΠ²Π»ΡΠ΅ΡΡΡ Π² <direct.h>. ΠΡΠ° ΡΡΠ½ΠΊΡΠΈΡ ΠΏΡΠΈΠ½ΠΈΠΌΠ°Π΅Ρ ΠΎΠ΄ΠΈΠ½ ΠΏΠ°ΡΠ°ΠΌΠ΅ΡΡ (ΠΈΠΌΡ ΠΊΠ°ΡΠ°Π»ΠΎΠ³Π°) ΠΈ Π²ΠΎΠ·Π²ΡΠ°ΡΠ°Π΅Ρ -1, Π΅ΡΠ»ΠΈ Π²ΠΎΠ·Π½ΠΈΠΊΠ»Π° ΠΎΡΠΈΠ±ΠΊΠ°, ΡΡΡΠ°Π½Π°Π²Π»ΠΈΠ²Π°Ρ Π² errno ΡΠΎΠΎΡΠ²Π΅ΡΡΡΠ²ΡΡΡΠΈΠΉ Π½ΠΎΠΌΠ΅Ρ ΠΎΡΠΈΠ±ΠΊΠΈ. ΠΡ ΠΌΠΎΠΆΠ΅ΡΠ΅ ΠΏΠΎΠ»ΡΡΠΈΡΡ Π·Π°Π²ΠΈΡΡΡΡΡ ΠΎΡ ΡΠ΅Π°Π»ΠΈΠ·Π°ΡΠΈΠΈ ΡΠ΅ΠΊΡΡΠΎΠ²ΡΡ ΡΡΡΠΎΠΊΡ ΠΎΡΠΈΠ±ΠΊΠΈ, Π²ΡΠ·ΡΠ²Π°Ρ strerror ΠΈΠ»ΠΈ perror.
Π Unix mkdir ΠΎΠ±ΡΡΠ²Π»ΡΠ΅ΡΡΡ Π² <sys/stat.h>, ΠΈ ΡΠΈΠ³Π½Π°ΡΡΡΠ° ΡΡΠΎΠΉ ΡΡΠ½ΠΊΡΠΈΠΈ Π½Π΅ΠΌΠ½ΠΎΠ³ΠΎ ΠΎΡΠ»ΠΈΡΠ°Π΅ΡΡΡ. Π‘Π΅ΠΌΠ°Π½ΡΠΈΠΊΠ° ΠΎΡΠΈΠ±ΠΊΠΈ ΡΠ°ΠΊΠ°Ρ ΠΆΠ΅, ΠΊΠ°ΠΊ Π² Windows, Π½ΠΎ ΡΡΡΠ΅ΡΡΠ²ΡΠ΅Ρ Π²ΡΠΎΡΠΎΠΉ ΠΏΠ°ΡΠ°ΠΌΠ΅ΡΡ, ΠΎΠΏΡΠ΅Π΄Π΅Π»ΡΡΡΠΈΠΉ ΠΏΡΠ°Π²Π° Π΄ΠΎΡΡΡΠΏΠ° Π½ΠΎΠ²ΠΎΠ³ΠΎ ΠΊΠ°ΡΠ°Π»ΠΎΠ³Π°. ΠΡ Π΄ΠΎΠ»ΠΆΠ½Ρ ΡΠΊΠ°Π·Π°ΡΡ ΠΏΡΠ°Π²Π° Π΄ΠΎΡΡΡΠΏΠ°, ΠΈΡΠΏΠΎΠ»ΡΠ·ΡΡ ΡΡΠ°Π΄ΠΈΡΠΈΠΎΠ½Π½ΡΠΉ ΡΠΎΡΠΌΠ°Ρ chmod (ΡΠΌ. Π΄ΠΎΠΏΠΎΠ»Π½ΠΈΡΠ΅Π»ΡΠ½ΡΡ ΠΈΠ½ΡΠΎΡΠΌΠ°ΡΠΈΡ Π½Π° man-ΡΡΡΠ°Π½ΠΈΡΠ΅ chmod); Π½Π°ΠΏΡΠΈΠΌΠ΅Ρ, 0777 ΠΎΠ·Π½Π°ΡΠ°Π΅Ρ, ΡΡΠΎ Π²Π»Π°Π΄Π΅Π»Π΅Ρ, Π³ΡΡΠΏΠΏΠΎΠ²ΠΎΠΉ ΠΏΠΎΠ»ΡΠ·ΠΎΠ²Π°ΡΠ΅Π»Ρ ΠΈ ΠΏΡΠΎΡΠΈΠ΅ ΠΏΠΎΠ»ΡΠ·ΠΎΠ²Π°ΡΠ΅Π»ΠΈ ΠΈΠΌΠ΅ΡΡ ΠΏΡΠ°Π²ΠΎ Π½Π° ΡΡΠ΅Π½ΠΈΠ΅, Π·Π°ΠΏΠΈΡΡ ΠΈ Π²ΡΠΏΠΎΠ»Π½Π΅Π½ΠΈΠ΅. Π’Π°ΠΊΠΈΠΌ ΠΎΠ±ΡΠ°Π·ΠΎΠΌ, Π²Ρ ΠΌΠΎΠ³Π»ΠΈ Π±Ρ Π²ΡΠ·Π²Π°ΡΡ ΡΡΡ ΡΡΠ½ΠΊΡΠΈΡ ΡΠ»Π΅Π΄ΡΡΡΠΈΠΌ ΠΎΠ±ΡΠ°Π·ΠΎΠΌ.
#include <iostream>
#include <sys/types.h>
#include <sys/stat.h>
int main(int argc, char** argv) {
if (argc < 2) {
std::cerr << "Usage: " << argv[0] << " [new dir name]\n";
return(EXIT_FAILURE);
}
if (mkdir(argv[1], 0777) == -1) { // Π‘ΠΎΠ·Π΄Π°ΡΡ ΠΊΠ°ΡΠ°Π»ΠΎΠ³
std::cerr << "Error: << strerror(errno);
return(EXIT_FAILURE);
}
}
ΠΡΠ»ΠΈ Π²Π°ΠΌ ΡΡΠ΅Π±ΡΠ΅ΡΡΡ ΠΎΠ±Π΅ΡΠΏΠ΅ΡΠΈΡΡ ΠΏΠ΅ΡΠ΅Π½ΠΎΡΠΈΠΌΠΎΡΡΡ, Π½Π΅ ΡΠ»Π΅Π΄ΡΠ΅Ρ ΡΠ°ΠΌΠΎΠΌΡ ΠΏΠΈΡΠ°ΡΡ ΠΎΠΏΠ΅ΡΠ°ΡΠΎΡΡ #ifdef, Π»ΡΡΡΠ΅ Π²ΠΎΡΠΏΠΎΠ»ΡΠ·ΠΎΠ²Π°ΡΡΡΡ Π±ΠΈΠ±Π»ΠΈΠΎΡΠ΅ΠΊΠΎΠΉ Boost Filesystem. ΠΡ ΠΌΠΎΠΆΠ΅ΡΠ΅ ΡΠΎΠ·Π΄Π°ΡΡ ΠΊΠ°ΡΠ°Π»ΠΎΠ³, ΠΈΡΠΏΠΎΠ»ΡΠ·ΡΡ ΡΡΠ½ΠΊΡΠΈΡ Ρreate_directory, ΠΊΠ°ΠΊ ΠΏΠΎΠΊΠ°Π·Π°Π½ΠΎ Π² ΠΏΡΠΈΠΌΠ΅ΡΠ΅ 10.16, ΠΊΠΎΡΠΎΡΡΠΉ ΡΠΎΠ΄Π΅ΡΠΆΠΈΡ ΠΊΠΎΡΠΎΡΠΊΡΡ ΠΏΡΠΎΠ³ΡΠ°ΠΌΠΌΡ, ΡΠΎΠ·Π΄Π°ΡΡΡΡ ΠΊΠ°ΡΠ°Π»ΠΎΠ³.
ΠΡΠΈΠΌΠ΅Ρ 10.16. Π‘ΠΎΠ·Π΄Π°Π½ΠΈΠ΅ ΠΊΠ°ΡΠ°Π»ΠΎΠ³Π° ΡΡΠ΅Π΄ΡΡΠ²Π°ΠΌΠΈ Boost