directory_iterator end;
ΠΠ°ΡΠ΅ΠΌ Π²Ρ ΠΌΠΎΠΆΠ΅ΡΠ΅ ΡΠΎΠ·Π΄Π°ΡΡ ΠΈΡΠ΅ΡΠ°ΡΠΎΡ Π΄Π»Ρ Π²Π°ΡΠ΅Π³ΠΎ ΠΏΡΡΠΈ ΠΈ ΡΠ»Π΅Π΄ΡΡΡΠΈΠΌ ΠΎΠ±ΡΠ°Π·ΠΎΠΌ ΡΡΠ°Π²Π½ΠΈΠ²Π°ΡΡ Π΅Π³ΠΎ Ρ ΠΌΠ°ΡΠΊΠ΅ΡΠΎΠΌ ΠΊΠΎΠ½ΡΠ°.
for (directory_iterator it(fullPath); it != end; ++it) {
// Π²ΡΠΏΠΎΠ»Π½ΠΈΡΡ Π»ΡΠ±ΡΠ΅ Π΄Π΅ΠΉΡΡΠ²ΠΈΡ Ρ *it
std::cout << it->leaf();
}
Π€ΡΠ½ΠΊΡΠΈΡ-ΡΠ»Π΅Π½ leaf Π²ΠΎΠ·Π²ΡΠ°ΡΠ°Π΅Ρ ΡΡΡΠΎΠΊΡ, ΠΏΡΠ΅Π΄ΡΡΠ°Π²Π»ΡΡΡΡΡ ΠΊΠΎΠ½Π΅ΡΠ½ΡΠΉ ΡΠ»Π΅ΠΌΠ΅Π½Ρ ΠΏΡΡΠΈ, Π° Π½Π΅ Π²Π΅ΡΡ ΠΏΡΡΡ, ΠΊΠΎΡΠΎΡΡΠΉ Π²Ρ ΠΌΠΎΠΆΠ΅ΡΠ΅ ΠΏΠΎΠ»ΡΡΠΈΡΡ, Π²ΡΠ·ΡΠ²Π°Ρ ΡΡΠ½ΠΊΡΠΈΡ-ΡΠ»Π΅Π½ string.
ΠΡΠ»ΠΈ Π²Π°ΠΌ ΡΡΠ΅Π±ΡΠ΅ΡΡΡ ΠΎΠ±Π΅ΡΠΏΠ΅ΡΠΈΡΡ ΠΏΠ΅ΡΠ΅Π½ΠΎΡΠΈΠΌΠΎΡΡΡ, Π½ΠΎ ΠΏΠΎ ΠΊΠ°ΠΊΠΈΠΌ-ΡΠΎ ΠΏΡΠΈΡΠΈΠ½Π°ΠΌ Π²Ρ Π½Π΅ ΠΌΠΎΠΆΠ΅ΡΠ΅ ΠΈΡΠΏΠΎΠ»ΡΠ·ΠΎΠ²Π°ΡΡ Π±ΠΈΠ±Π»ΠΈΠΎΡΠ΅ΠΊΠΈ Boost, ΠΎΠ±ΡΠ°ΡΠΈΡΠ΅ Π²Π½ΠΈΠΌΠ°Π½ΠΈΠ΅ Π½Π° ΠΈΡΡ ΠΎΠ΄Π½ΡΠΉ ΠΊΠΎΠ΄ Boost. ΠΠ½ ΡΠΎΠ΄Π΅ΡΠΆΠΈΡ ΠΎΠΏΠ΅ΡΠ°ΡΠΎΡΡ #ifdef, ΠΊΠΎΡΠΎΡΡΠ΅ ΡΡΠΈΡΡΠ²Π°ΡΡ (ΠΏΠΎ Π±ΠΎΠ»ΡΡΠ΅ΠΉ ΡΠ°ΡΡΠΈ) ΠΎΡΠ»ΠΈΡΠΈΡ ΡΡΠ΅Π΄Ρ Windows ΠΈ ΠΠ‘, ΠΈΡΠΏΠΎΠ»ΡΠ·ΡΡΡΠΈΡ ΠΈΠ½ΡΠ΅ΡΡΠ΅ΠΉΡ Posix, ΠΈ Π² ΡΠ°ΡΡΠ½ΠΎΡΡΠΈ ΠΎΡΠ»ΠΈΡΠΈΡ Π² ΠΏΡΠ΅Π΄ΡΡΠ°Π²Π»Π΅Π½ΠΈΠΈ ΠΏΡΡΠ΅ΠΉ, Π½Π°ΠΏΡΠΈΠΌΠ΅Ρ Π±ΡΠΊΠ²Ρ Π΄ΠΈΡΠΊΠΎΠ²ΠΎΠ΄ΠΎΠ² ΠΈ ΠΈΠΌΠ΅Π½Π° ΡΡΡΡΠΎΠΉΡΡΠ².
Π‘ΠΌΠΎΡΡΠΈ ΡΠ°ΠΊΠΆΠ΅Π Π΅ΡΠ΅ΠΏΡΡ 10.10 ΠΈ 10.11.
10.13. ΠΠ·Π²Π»Π΅ΡΠ΅Π½ΠΈΠ΅ ΡΠ°ΡΡΠΈΡΠ΅Π½ΠΈΡ ΡΠ°ΠΉΠ»Π° ΠΈΠ· ΡΡΡΠΎΠΊΠΈ
ΠΠΌΠ΅Π΅ΡΡΡ ΠΈΠΌΡ ΡΠ°ΠΉΠ»Π° ΠΈΠ»ΠΈ ΠΏΠΎΠ»Π½ΡΠΉ ΠΏΡΡΡ ΠΈ ΡΡΠ΅Π±ΡΠ΅ΡΡΡ ΠΏΠΎΠ»ΡΡΠΈΡΡ ΡΠ°ΡΡΠΈΡΠ΅Π½ΠΈΠ΅ ΡΠ°ΠΉΠ»Π°, ΠΊΠΎΡΠΎΡΠΎΠ΅ ΡΠ²Π»ΡΠ΅ΡΡΡ ΡΠ°ΡΡΡΡ ΠΈΠΌΠ΅Π½ΠΈ ΡΠ°ΠΉΠ»Π°, ΡΠ°ΡΠΏΠΎΠ»ΠΎΠΆΠ΅Π½Π½ΠΎΠΉ Π·Π° ΠΏΠΎΡΠ»Π΅Π΄Π½Π΅ΠΉ ΡΠΎΡΠΊΠΎΠΉ. ΠΠ°ΠΏΡΠΈΠΌΠ΅Ρ, Π² ΠΈΠΌΠ΅Π½Π°Ρ ΡΠ°ΠΉΠ»ΠΎΠ² src.cpp, Window.class ΠΈ Resume.doc ΡΠ°ΡΡΠΈΡΠ΅Π½ΠΈΡΠΌΠΈ ΡΠ°ΠΉΠ»Π° ΡΠ²Π»ΡΡΡΡΡ ΡΠΎΠΎΡΠ²Π΅ΡΡΡΠ²Π΅Π½Π½ΠΎ .cpp, .class ΠΈ .doc.
Π Π΅ΡΠ΅Π½ΠΈΠ΅ΠΡΠ΅ΠΎΠ±ΡΠ°Π·ΡΠΉΡΠ΅ ΠΈΠΌΡ ΡΠ°ΠΉΠ»Π° ΠΈΠ»ΠΈ ΠΏΡΡΡ ΠΊ Π½Π΅ΠΌΡ Π² ΡΡΡΠΎΠΊΡ string, ΠΈΡΠΏΠΎΠ»ΡΠ·ΡΠΉΡΠ΅ ΡΡΠ½ΠΊΡΠΈΡ-ΡΠ»Π΅Π½ rfind Π΄Π»Ρ ΠΎΠΏΡΠ΅Π΄Π΅Π»Π΅Π½ΠΈΡ ΠΏΠΎΠ·ΠΈΡΠΈΠΈ ΠΏΠΎΡΠ»Π΅Π΄Π½Π΅ΠΉ ΡΠΎΡΠΊΠΈ ΠΈ Π²ΠΎΠ·Π²ΡΠ°ΡΠΈΡΠ΅ ΡΠΎ, ΡΡΠΎ Π½Π°Ρ ΠΎΠ΄ΠΈΡΡΡ Π·Π° Π½Π΅ΠΉ. ΠΡΠΈΠΌΠ΅Ρ 10.20 ΠΏΠΎΠΊΠ°Π·ΡΠ²Π°Π΅Ρ, ΠΊΠ°ΠΊ ΡΡΠΎ ΠΌΠΎΠΆΠ½ΠΎ ΡΠ΄Π΅Π»Π°ΡΡ.
ΠΡΠΈΠΌΠ΅Ρ 10.20. ΠΠΎΠ»ΡΡΠ΅Π½ΠΈΠ΅ ΡΠ°ΡΡΠΈΡΠ΅Π½ΠΈΡ ΡΠ°ΠΉΠ»Π° ΠΈΠ· Π΅Π³ΠΎ ΠΈΠΌΠ΅Π½ΠΈ
#include <iostream>
#include <string>
using std::string;
string getFileExt(const string& s) {
size_t i = s.rfind('.', s.length());
if (i ! = string::npos) {
return(s.substr(i+1, s.length() - i));
}
return("");
}
int main(int argc, char** argv) {
string path = argv[1];
std::cout << "The extension is \"" << getFileExt(path) << "\"\n";
}
ΠΠ±ΡΡΠΆΠ΄Π΅Π½ΠΈΠ΅ΠΠ»Ρ ΠΏΠΎΠ»ΡΡΠ΅Π½ΠΈΡ ΡΠ°ΡΡΠΈΡΠ΅Π½ΠΈΡ ΠΈΠ· ΠΈΠΌΠ΅Π½ΠΈ ΡΠ°ΠΉΠ»Π° Π΄ΠΎΡΡΠ°ΡΠΎΡΠ½ΠΎ Π»ΠΈΡΡ Π½Π°ΠΉΡΠΈ ΠΏΠΎΠ·ΠΈΡΠΈΡ ΠΏΠΎΡΠ»Π΅Π΄Π½Π΅ΠΉ ΡΠΎΡΠΊΠΈ Β«.Β» ΠΈ Π²ΡΠ΄Π΅Π»ΠΈΡΡ Π²ΡΠ΅, ΡΡΠΎ Π½Π°Ρ ΠΎΠ΄ΠΈΡΡΡ ΡΠΏΡΠ°Π²Π° ΠΎΡ Π½Π΅Π΅. Π‘ΡΠ°Π½Π΄Π°ΡΡΠ½ΡΠΉ ΠΊΠ»Π°ΡΡ string, ΠΎΠΏΡΠ΅Π΄Π΅Π»Π΅Π½Π½ΡΠΉ Π² <string>, ΡΠΎΠ΄Π΅ΡΠΆΠΈΡ ΡΡΠ½ΠΊΡΠΈΠΈ, ΠΊΠΎΡΠΎΡΡΠ΅ ΠΌΠΎΠ³ΡΡ Π²ΡΠΏΠΎΠ»Π½ΠΈΡΡ ΠΎΠ±Π΅ ΡΡΠΈ ΠΎΠΏΠ΅ΡΠ°ΡΠΈΠΈ: rfind ΠΈ substr.
rfind Π²ΡΠΏΠΎΠ»Π½ΠΈΡ ΠΏΠΎΠΈΡΠΊ (Π² ΠΎΠ±ΡΠ°ΡΠ½ΠΎΠΌ Π½Π°ΠΏΡΠ°Π²Π»Π΅Π½ΠΈΠΈ) ΡΠΎΠ³ΠΎ, ΡΡΠΎ Π²Ρ ΠΏΠ΅ΡΠ΅Π΄Π°Π΅ΡΠ΅ Π΅ΠΉ Π² ΠΏΠ΅ΡΠ²ΠΎΠΌ Π°ΡΠ³ΡΠΌΠ΅Π½ΡΠ΅ (ΡΠΈΠΌΠ²ΠΎΠ» ΡΠΈΠΏΠ° char Π² Π΄Π°Π½Π½ΠΎΠΌ ΡΠ»ΡΡΠ°Π΅), Π½Π°ΡΠΈΠ½Π°Ρ Ρ ΠΏΠΎΠ·ΠΈΡΠΈΠΈ, ΡΠΊΠ°Π·Π°Π½Π½ΠΎΠΉ Π²ΡΠΎΡΡΠΌ Π°ΡΠ³ΡΠΌΠ΅Π½ΡΠΎΠΌ, ΠΈ Π²ΠΎΠ·Π²ΡΠ°ΡΠ°Π΅Ρ ΠΏΠΎΠ·ΠΈΡΠΈΡ, Π² ΠΊΠΎΡΠΎΡΠΎΠΉ Π½Π°ΠΉΠ΄Π΅Π½ ΡΠΊΠ°Π·Π°Π½Π½ΡΠΉ ΠΎΠ±ΡΠ΅ΠΊΡ. ΠΡΠ»ΠΈ ΠΏΠΎΠΈΡΠΊ Π·Π°Π²Π΅ΡΡΠΈΠ»ΡΡ Π½Π΅ΡΠ΄Π°ΡΠ΅ΠΉ, rfind Π²ΠΎΠ·Π²ΡΠ°ΡΠΈΡ string::npos. Π€ΡΠ½ΠΊΡΠΈΡ substr ΡΠ°ΠΊΠΆΠ΅ ΠΈΠΌΠ΅Π΅Ρ Π΄Π²Π° Π°ΡΠ³ΡΠΌΠ΅Π½ΡΠ°. ΠΠ΅ΡΠ²ΡΠΉ Π°ΡΠ³ΡΠΌΠ΅Π½Ρ ΡΠΎΠ΄Π΅ΡΠΆΠΈΡ ΠΏΠΎΠ·ΠΈΡΠΈΡ ΠΏΠ΅ΡΠ²ΠΎΠ³ΠΎ ΠΊΠΎΠΏΠΈΡΡΠ΅ΠΌΠΎΠ³ΠΎ ΡΠ»Π΅ΠΌΠ΅Π½ΡΠ°, Π° Π²ΡΠΎΡΠΎΠΉ Π°ΡΠ³ΡΠΌΠ΅Π½Ρ β ΠΊΠΎΠ»ΠΈΡΠ΅ΡΡΠ²ΠΎ ΠΊΠΎΠΏΠΈΡΡΠ΅ΠΌΡΡ ΡΠΈΠΌΠ²ΠΎΠ»ΠΎΠ².
Π‘ΡΠ°Π½Π΄Π°ΡΡΠ½ΡΠΉ ΠΊΠ»Π°ΡΡ ΡΡΡΠΎΠΊΠΈ ΡΠΎΠ΄Π΅ΡΠΆΠΈΡ Π½Π΅ΡΠΊΠΎΠ»ΡΠΊΠΎ ΡΡΠ½ΠΊΡΠΈΠΉ-ΡΠ»Π΅Π½ΠΎΠ², Π²ΡΠΏΠΎΠ»Π½ΡΡΡΠΈΡ ΠΏΠΎΠΈΡΠΊ. Π‘ΠΌ. ΡΠ΅ΡΠ΅ΠΏΡ 4.9, Π² ΠΊΠΎΡΠΎΡΠΎΠΌ Π±ΠΎΠ»Π΅Π΅ Π΄Π΅ΡΠ°Π»ΡΠ½ΠΎ ΠΎΠ±ΡΡΠΆΠ΄Π°Π΅ΡΡΡ ΠΏΠΎΠΈΡΠΊ ΡΡΡΠΎΠΊ.
Π‘ΠΌΠΎΡΡΠΈ ΡΠ°ΠΊΠΆΠ΅Π Π΅ΡΠ΅ΠΏΡΡ 4.9 ΠΈ 10.12.
10.14. ΠΠ·Π²Π»Π΅ΡΠ΅Π½ΠΈΠ΅ ΠΈΠΌΠ΅Π½ΠΈ ΡΠ°ΠΉΠ»Π° ΠΈΠ· ΠΏΠΎΠ»Π½ΠΎΠ³ΠΎ ΠΏΡΡΠΈ
ΠΠΌΠ΅Π΅ΡΡΡ ΠΏΠΎΠ»Π½ΡΠΉ ΠΏΡΡΡ ΠΊ ΡΠ°ΠΉΠ»Ρ, Π½Π°ΠΏΡΠΈΠΌΠ΅Ρ d:\apps\src\foo.Ρ, ΠΈ ΡΡΠ΅Π±ΡΠ΅ΡΡΡ ΠΏΠΎΠ»ΡΡΠΈΡΡ ΠΈΠΌΡ ΡΠ°ΠΉΠ»a, foo.Ρ.
Π Π΅ΡΠ΅Π½ΠΈΠ΅ΠΡΠΈΠΌΠ΅Π½ΠΈΡΠ΅ ΠΏΠΎΠ΄Ρ ΠΎΠ΄, ΠΊΠΎΡΠΎΡΡΠΉ ΠΈΡΠΏΠΎΠ»ΡΠ·ΠΎΠ²Π°Π»ΡΡ Π² ΠΏΡΠ΅Π΄ΡΠ΄ΡΡΠ΅ΠΌ ΡΠ΅ΡΠ΅ΠΏΡΠ΅, ΠΈ ΠΈΡΠΏΠΎΠ»ΡΠ·ΡΠΉΡΠ΅ ΡΡΠ½ΠΊΡΠΈΠΈ rfind ΠΈ substr Π΄Π»Ρ ΠΏΠΎΠΈΡΠΊΠ° ΠΈ ΠΏΠΎΠ»ΡΡΠ΅Π½ΠΈΡ ΠΈΠ· ΠΏΠΎΠ»Π½ΠΎΠ³ΠΎ ΠΏΡΡΠΈ ΡΠΎ, ΡΡΠΎ Π²Π°ΠΌ Π½ΡΠΆΠ½ΠΎ. ΠΡΠΈΠΌΠ΅Ρ 10.21 ΠΏΠΎΠΊΠ°Π·ΡΠ²Π°Π΅Ρ, ΠΊΠ°ΠΊ ΡΡΠΎ ΠΌΠΎΠΆΠ½ΠΎ ΡΠ΄Π΅Π»Π°ΡΡ.
ΠΡΠΈΠΌΠ΅Ρ 10.21. ΠΠ·Π²Π»Π΅ΡΠ΅Π½ΠΈΠ΅ ΠΈΠΌΠ΅Π½ΠΈ ΡΠ°ΠΉΠ»Π° ΠΈΠ· ΠΏΠΎΠ»Π½ΠΎΠ³ΠΎ ΠΏΡΡΠΈ
#include <iostream>
#include <string>
using std::string;
string getFileName(const string& s) {
char sep = '/';
#ifdef _WIN32
sep = '\\';
#endif
size_t i = s.rfind(sep.s.length());
if (i ! = string::npos) {
return(s.substr(i+1, s.length( ) - i));
}
return("");
}
int main(int argc, char** argv) {
string path = argv[1];
std::cout << "The file name is \"" << getFileName(path) << "\"\n";
}
ΠΠ±ΡΡΠΆΠ΄Π΅Π½ΠΈΠ΅Π‘ΠΌ. ΠΏΡΠ΅Π΄ΡΠ΄ΡΡΠΈΠΉ ΡΠ΅ΡΠ΅ΠΏΡ, Π² ΠΊΠΎΡΠΎΡΠΎΠΌ ΠΏΡΠΈΠ²ΠΎΠ΄ΠΈΡΡΡ Π΄Π΅ΡΠ°Π»ΡΠ½ΠΎΠ΅ ΠΎΠΏΠΈΡΠ°Π½ΠΈΠ΅ ΡΡΠ½ΠΊΡΠΈΠΉ rfind ΠΈ substr. Π‘ΡΠΎΠΈΡ ΠΎΡΠΌΠ΅ΡΠΈΡΡ ΡΠΎΠ»ΡΠΊΠΎ ΡΠΎ, ΡΡΠΎ Π²Ρ ΡΠΆΠ΅, ΠΏΠΎ-Π²ΠΈΠ΄ΠΈΠΌΠΎΠΌΡ, Π·Π°ΠΌΠ΅ΡΠΈΠ»ΠΈ Π² ΠΏΡΠΈΠΌΠ΅ΡΠ΅ 10.21: Π² Windows Π² ΠΊΠ°ΡΠ΅ΡΡΠ²Π΅ ΡΠ°Π·Π΄Π΅Π»ΠΈΡΠ΅Π»Ρ ΠΈΡΠΏΠΎΠ»ΡΠ·ΡΠ΅ΡΡΡ ΠΎΠ±ΡΠ°ΡΠ½ΡΠΉ ΡΠ»Π΅Ρ Π²ΠΌΠ΅ΡΡΠΎ ΠΏΡΡΠΌΠΎΠ³ΠΎ, ΠΏΠΎΡΡΠΎΠΌΡ Ρ Π΄ΠΎΠ±Π°Π²ΠΈΠ» ΠΎΠΏΠ΅ΡΠ°ΡΠΎΡ #ifdef Π΄Π»Ρ ΡΡΡΠ°Π½ΠΎΠ²ΠΊΠΈ ΡΡΠ΅Π±ΡΠ΅ΠΌΠΎΠ³ΠΎ ΡΠ°Π·Π΄Π΅Π»ΠΈΡΠ΅Π»Ρ ΡΠ»Π΅ΠΌΠ΅Π½ΡΠΎΠ² ΠΏΡΡΠΈ.
ΠΠ»Π°ΡΡ path ΠΈΠ· Π±ΠΈΠ±Π»ΠΈΠΎΡΠ΅ΠΊΠΈ Boost Filesystem ΠΏΠΎΠ·Π²ΠΎΠ»ΡΠ΅Ρ Π»Π΅Π³ΠΊΠΎ ΠΏΠΎΠ»ΡΡΠΈΡΡ Ρ ΠΏΠΎΠΌΠΎΡΡΡ ΡΡΠ½ΠΊΡΠΈΠΈ-ΡΠ»Π΅Π½Π° path::leaf ΠΏΠΎΡΠ»Π΅Π΄Π½ΠΈΠΉ ΡΠ»Π΅ΠΌΠ΅Π½Ρ ΠΏΠΎΠ»Π½ΠΎΠ³ΠΎ ΠΏΡΡΠΈ, ΠΊΠΎΡΠΎΡΡΠΌ ΠΌΠΎΠΆΠ΅Ρ Π±ΡΡΡ ΠΈΠΌΡ ΡΠ°ΠΉΠ»Π° ΠΈΠ»ΠΈ ΠΊΠ°ΡΠ°Π»ΠΎΠ³Π°. Π ΠΏΡΠΈΠΌΠ΅ΡΠ΅ 10.22 ΠΏΡΠΈΠ²ΠΎΠ΄ΠΈΡΡΡ ΠΏΡΠΎΡΡΠ°Ρ ΠΏΡΠΎΠ³ΡΠ°ΠΌΠΌΠ°, ΠΊΠΎΡΠΎΡΠ°Ρ ΠΈΡΠΏΠΎΠ»ΡΠ·ΡΠ΅Ρ ΡΡΡ ΡΡΠ½ΠΊΡΠΈΡ, ΡΡΠΎΠ±Ρ ΠΏΠΎΠΊΠ°Π·Π°ΡΡ, ΠΊ ΡΠ΅ΠΌΡ ΠΎΡΠ½ΠΎΡΠΈΡΡΡ ΡΡΠΎΡ ΠΏΡΡΡ: ΠΊ ΡΠ°ΠΉΠ»Ρ ΠΈΠ»ΠΈ ΠΊ ΠΊΠ°ΡΠ°Π»ΠΎΠ³Ρ.
ΠΡΠΈΠΌΠ΅Ρ 10.22. ΠΠΎΠ»ΡΡΠ΅Π½ΠΈΠ΅ ΠΈΠΌΠ΅Π½ΠΈ ΡΠ°ΠΉΠ»Π° ΠΈΠ· ΠΏΡΡΠΈ
#include <iostream>
#include <cstdlib>
#include <boost/filesystem/operations.hpp>
using namespace std;
using namespace boost::filesystem;
int main(int argc, char** argv) {
// ΠΡΠΎΠ²Π΅ΡΠΊΠ° ΠΏΠ°ΡΠ°ΠΌΠ΅ΡΡΠΎΠ²
try {
path p = complete(path(argv[1], native));
cout << p.leaf() << " is a "
<< (is_directory(p) ? "directory" : "file") << endl;
} catch (exception& e) {
cerr << e.what() << endl;
}
return(EXIT_SUCCESS);
}
Π‘ΠΌ. ΠΎΠ±ΡΡΠΆΠ΄Π΅Π½ΠΈΠ΅ ΡΠ΅ΡΠ΅ΠΏΡΠ° 10.7, Π³Π΄Π΅ Π±ΠΎΠ»Π΅Π΅ Π΄Π΅ΡΠ°Π»ΡΠ½ΠΎ ΡΠ°ΡΡΠΌΠ°ΡΡΠΈΠ²Π°Π΅ΡΡΡ ΠΊΠ»Π°ΡΡ path.
Π‘ΠΌΠΎΡΡΠΈ ΡΠ°ΠΊΠΆΠ΅Π Π΅ΡΠ΅ΠΏΡ 10.15.
10.15. ΠΠ·Π²Π»Π΅ΡΠ΅Π½ΠΈΠ΅ ΠΏΡΡΠΈ ΠΈΠ· ΠΏΠΎΠ»Π½ΠΎΠ³ΠΎ ΠΈΠΌΠ΅Π½ΠΈ ΡΠ°ΠΉΠ»Π°
ΠΠΌΠ΅Π΅ΡΡΡ ΠΏΠΎΠ»Π½ΠΎΠ΅ ΠΈΠΌΡ ΡΠ°ΠΉΠ»Π° (ΠΈΠΌΡ ΡΠ°ΠΉΠ»Π° ΠΈ ΠΏΡΡΡ Π΄ΠΎΡΡΡΠΏΠ° ΠΊ Π½Π΅ΠΌΡ), Π½Π°ΠΏΡΠΈΠΌΠ΅Ρ d:\apps\src\foo.Ρ, ΠΈ ΡΡΠ΅Π±ΡΠ΅ΡΡΡ ΠΏΠΎΠ»ΡΡΠΈΡΡ ΠΏΡΡΡ ΠΊ ΡΠ°ΠΉΠ»Ρ, d:\apps\src.
Π Π΅ΡΠ΅Π½ΠΈΠ΅ΠΡΠΈΠΌΠ΅Π½ΠΈΡΠ΅ ΠΏΠΎΠ΄Ρ ΠΎΠ΄, ΠΊΠΎΡΠΎΡΡΠΉ ΠΈΡΠΏΠΎΠ»ΡΠ·ΠΎΠ²Π°Π»ΡΡ Π² ΠΏΡΠ΅Π΄ΡΠ΄ΡΡΠΈΡ Π΄Π²ΡΡ ΡΠ΅ΡΠ΅ΠΏΡΠ°Ρ , ΠΈ ΠΈΡΠΏΠΎΠ»ΡΠ·ΡΠΉΡΠ΅ ΡΡΠ½ΠΊΡΠΈΠΈ rfind ΠΈ substr Π΄Π»Ρ ΠΏΠΎΠΈΡΠΊΠ° ΠΈ ΠΏΠΎΠ»ΡΡΠ΅Π½ΠΈΡ ΠΈΠ· ΠΏΠΎΠ»Π½ΠΎΠ³ΠΎ ΠΏΡΡΠΈ ΡΠΎ, ΡΡΠΎ Π²Π°ΠΌ Π½ΡΠΆΠ½ΠΎ. Π ΠΏΡΠΈΠΌΠ΅ΡΠ΅ 10.23 ΠΏΡΠΈΠ²ΠΎΠ΄ΠΈΡΡΡ ΠΊΠΎΡΠΎΡΠΊΠ°Ρ ΠΏΡΠΎΠ³ΡΠ°ΠΌΠΌΠ°, ΠΏΠΎΠΊΠ°Π·ΡΠ²Π°ΡΡΠ°Ρ, ΠΊΠ°ΠΊ ΡΡΠΎ ΠΌΠΎΠΆΠ½ΠΎ ΡΠ΄Π΅Π»Π°ΡΡ.
ΠΡΠΈΠΌΠ΅Ρ 10.23. ΠΠΎΠ»ΡΡΠ΅Π½ΠΈΠ΅ ΠΏΡΡΠΈ ΠΈΠ· ΠΏΠΎΠ»Π½ΠΎΠ³ΠΎ ΠΈΠΌΠ΅Π½ΠΈ ΡΠ°ΠΉΠ»Π°
#include <iostream>
#include <string>
using std::string;
string getPathName(const string& s) {
char sep = '/';
#ifdef _WIN32
sep = '\\';
#endif
size_t i = s.rfind(sep, s.length());
if (i != string::npos) {
return(s.substr(0, !));
}
return("");
}
int main(int argc, char** argv) {
string path = argv[1];
std::cout << "The path name is \"" << getPathName(path) << "\"\n";
}
ΠΠ±ΡΡΠΆΠ΄Π΅Π½ΠΈΠ΅ΠΡΠΈΠΌΠ΅Ρ 10.23 ΡΡΠΈΠ²ΠΈΠ°Π»Π΅Π½, ΠΎΡΠΎΠ±Π΅Π½Π½ΠΎ Π΅ΡΠ»ΠΈ Π²Ρ ΡΠΆΠ΅ Π·Π½Π°ΠΊΠΎΠΌΡ Ρ Π΄Π²ΡΠΌΡ ΠΏΡΠ΅Π΄ΡΠ΄ΡΡΠΈΠΌΠΈ ΡΠ΅ΡΠ΅ΠΏΡΠ°ΠΌΠΈ, ΠΏΠΎΡΡΠΎΠΌΡ Π΄ΠΎΠΏΠΎΠ»Π½ΠΈΡΠ΅Π»ΡΠ½ΡΠ΅ ΠΏΠΎΡΡΠ½Π΅Π½ΠΈΡ Π½Π΅ ΡΡΠ΅Π±ΡΡΡΡΡ. ΠΠ΄Π½Π°ΠΊΠΎ, ΠΊΠ°ΠΊ ΠΈ Π²ΠΎ ΠΌΠ½ΠΎΠ³ΠΈΡ Π΄ΡΡΠ³ΠΈΡ ΡΠ΅ΡΠ΅ΠΏΡΠ°Ρ , Π±ΠΈΠ±Π»ΠΈΠΎΡΠ΅ΠΊΠ° Boost Filesystem ΠΏΠΎΠ·Π²ΠΎΠ»ΡΠ΅Ρ ΠΈΠ·Π²Π»Π΅ΠΊΠ°ΡΡ Ρ ΠΏΠΎΠΌΠΎΡΡΡ ΡΡΠ½ΠΊΡΠΈΠΈ branch_path Π²ΡΠ΅, ΡΡΠΎ ΡΠ³ΠΎΠ΄Π½ΠΎ, ΠΊΡΠΎΠΌΠ΅ ΠΏΠΎΡΠ»Π΅Π΄Π½Π΅ΠΉ ΡΠ°ΡΡΠΈ ΠΈΠΌΠ΅Π½ΠΈ ΡΠ°ΠΉΠ»Π°. ΠΡΠΈΠΌΠ΅Ρ 10.24 ΠΏΠΎΠΊΠ°Π·ΡΠ²Π°Π΅Ρ, ΠΊΠ°ΠΊ ΠΌΠΎΠΆΠ½ΠΎ ΠΈΡΠΏΠΎΠ»ΡΠ·ΠΎΠ²Π°ΡΡ ΡΡΡ ΡΡΠ½ΠΊΡΠΈΡ.
ΠΡΠΈΠΌΠ΅Ρ 10.24. ΠΠΎΠ»ΡΡΠ΅Π½ΠΈΠ΅ Π±Π°Π·ΠΎΠ²ΠΎΠ³ΠΎ ΠΏΡΡΠΈ
#include <iostream>
#include <cstdlib>
#include <boost/filesystem/operations.hpp>
using namespace std;
using namespace boost::filesystem;
int main(int argc, char** argv) {
// ΠΡΠΎΠ²Π΅ΡΠΊΠ° ΠΏΠ°ΡΠ°ΠΌΠ΅ΡΡΠΎΠ²...
try {
path p = complete(path(argv[1], native));
cout << p.branch_path().string() << endl;
} catch (exception& e) {
cerr << e.what() << endl;
}
return(EXIT_SUCCESS);
}
Π Π΅Π·ΡΠ»ΡΡΠ°Ρ Π²ΡΠΏΠΎΠ»Π½Π΅Π½ΠΈΡ ΠΏΡΠΈΠΌΠ΅ΡΠ° 10.24 ΠΌΠΎΠΆΠ΅Ρ Π²ΡΠ³Π»ΡΠ΄Π΅ΡΡ ΡΠ»Π΅Π΄ΡΡΡΠΈΠΌ ΠΎΠ±ΡΠ°Π·ΠΎΠΌ.
D:\src\ccb\c10>bin\GetPathBoost.exe Ρ:\windows\system32\1033
Ρ:/windows/system32
Π‘ΠΌΠΎΡΡΠΈ ΡΠ°ΠΊΠΆΠ΅Π Π΅ΡΠ΅ΠΏΡΡ 10.13 ΠΈ 10.14.
10.16. ΠΠ°ΠΌΠ΅Π½Π° ΡΠ°ΡΡΠΈΡΠ΅Π½ΠΈΡ ΡΠ°ΠΉΠ»Π°
ΠΠΌΠ΅Π΅ΡΡΡ ΠΈΠΌΡ ΡΠ°ΠΉΠ»Π° (Π²ΠΎΠ·ΠΌΠΎΠΆΠ½ΠΎ, Ρ ΠΏΡΡΠ΅ΠΌ Π΄ΠΎΡΡΡΠΏΠ° ΠΊ Π½Π΅ΠΌΡ) ΠΈ ΡΡΠ΅Π±ΡΠ΅ΡΡΡ Π·Π°ΠΌΠ΅Π½ΠΈΡΡ ΡΠ°ΡΡΠΈΡΠ΅Π½ΠΈΠ΅ ΡΠ°ΠΉΠ»Π°. ΠΠ°ΠΏΡΠΈΠΌΠ΅Ρ, ΠΈΠΌΡ ΡΠ°ΠΉΠ»Π° thesis.tex ΡΡΠ΅Π±ΡΠ΅ΡΡΡ ΠΏΡΠ΅ΠΎΠ±ΡΠ°Π·ΠΎΠ²Π°ΡΡ Π² thesis.txt.
Π Π΅ΡΠ΅Π½ΠΈΠ΅ΠΡΠΏΠΎΠ»ΡΠ·ΡΠΉΡΠ΅ ΡΡΠ½ΠΊΡΠΈΠΈ-ΡΠ»Π΅Π½Ρ rfind ΠΈ replace ΠΊΠ»Π°ΡΡΠ° string Π΄Π»Ρ ΠΏΠΎΠΈΡΠΊΠ° ΡΠ°ΡΡΠΈΡΠ΅Π½ΠΈΡ ΠΈ Π΅Π³ΠΎ Π·Π°ΠΌΠ΅Π½Ρ. ΠΡΠΈΠΌΠ΅Ρ 10.25 ΠΏΠΎΠΊΠ°Π·ΡΠ²Π°Π΅Ρ, ΠΊΠ°ΠΊ ΡΡΠΎ ΠΌΠΎΠΆΠ½ΠΎ ΡΠ΄Π΅Π»Π°ΡΡ.
ΠΡΠΈΠΌΠ΅Ρ 10.25. ΠΠ°ΠΌΠ΅Π½Π° ΡΠ°ΡΡΠΈΡΠ΅Π½ΠΈΡ ΡΠ°ΠΉΠ»Π°
#include <iostream>
#include <string>
using std::string;
void replaceExt(string& s, const string& newExt) {
string::size_type i = s.rfind('.', s.length());
if (i != string::npos) {
s.replace(i+1, newExt.length(), newExt);
}
}
int main(int argc, char** argv) {
string path = argv[1];
replaceExt(path, "foobar");
std::cout << "The new name is \"" << path << "\"\n";
}
ΠΠ±ΡΡΠΆΠ΄Π΅Π½ΠΈΠ΅ΠΠ΄Π΅ΡΡ ΠΈΡΠΏΠΎΠ»ΡΠ·ΡΠ΅ΡΡΡ ΠΏΠΎΠ΄Ρ ΠΎΠ΄, Π°Π½Π°Π»ΠΎΠ³ΠΈΡΠ½ΡΠΉ ΡΠΎΠΌΡ, ΠΊΠΎΡΠΎΡΡΠΉ ΠΏΡΠΈΠΌΠ΅Π½ΡΠ»ΡΡ Π² ΠΏΡΠ΅Π΄ΡΠ΄ΡΡΠΈΡ ΡΠ΅ΡΠ΅ΠΏΡΠ°Ρ , ΠΎΠ΄Π½Π°ΠΊΠΎ Π² Π΄Π°Π½Π½ΠΎΠΌ ΡΠ»ΡΡΠ°Π΅ Ρ ΠΈΡΠΏΠΎΠ»ΡΠ·ΠΎΠ²Π°Π» ΡΡΠ½ΠΊΡΠΈΡ replace Π΄Π»Ρ Π·Π°ΠΌΠ΅Π½Ρ ΡΠ°ΡΡΠΈ ΡΡΡΠΎΠΊΠΈ Π½ΠΎΠ²ΠΎΠΉ ΠΏΠΎΠ΄ΡΡΡΠΎΠΊΠΎΠΉ. Π€ΡΠ½ΠΊΡΠΈΡ replace ΠΈΠΌΠ΅Π΅Ρ ΡΡΠΈ ΠΏΠ°ΡΠ°ΠΌΠ΅ΡΡΠ°. ΠΠ΅ΡΠ²ΡΠΉ ΠΏΠ°ΡΠ°ΠΌΠ΅ΡΡ Π·Π°Π΄Π°Π΅Ρ ΠΏΠΎΠ·ΠΈΡΠΈΡ, Π² ΠΊΠΎΡΠΎΡΡΡ Π²ΡΡΠ°Π²Π»ΡΠ΅ΡΡΡ Π½ΠΎΠ²Π°Ρ ΠΏΠΎΠ΄ΡΡΡΠΎΠΊΠ°, Π° Π²ΡΠΎΡΠΎΠΉ ΠΏΠ°ΡΠ°ΠΌΠ΅ΡΡ ΠΎΠΏΡΠ΅Π΄Π΅Π»ΡΠ΅Ρ ΠΊΠΎΠ»ΠΈΡΠ΅ΡΡΠ²ΠΎ ΡΠΈΠΌΠ²ΠΎΠ»ΠΎΠ², ΠΊΠΎΡΠΎΡΡΠ΅ Π½Π΅ΠΎΠ±Ρ ΠΎΠ΄ΠΈΠΌΠΎ ΡΠ΄Π°Π»ΠΈΡΡ Π² ΡΠΎΡΠΌΠΈΡΡΠ΅ΠΌΠΎΠΉ ΡΡΡΠΎΠΊΠ΅. Π’ΡΠ΅ΡΠΈΠΉ ΠΏΠ°ΡΠ°ΠΌΠ΅ΡΡ β ΡΡΠΎ Π·Π½Π°ΡΠ΅Π½ΠΈΠ΅, ΠΊΠΎΡΠΎΡΠΎΠ΅ Π±ΡΠ΄Π΅Ρ ΠΈΡΠΏΠΎΠ»ΡΠ·ΠΎΠ²Π°Π½ΠΎ Π΄Π»Ρ Π·Π°ΠΌΠ΅Π½Ρ ΡΠ΄Π°Π»ΡΠ΅ΠΌΠΎΠΉ ΡΠ°ΡΡΠΈ ΡΡΡΠΎΠΊΠΈ.