- Win32 API
- MFC
- C++ Builder
- UNIX
- Python
- Ruby
- Windows VB Script
1 Win32 API
static const int INVALID_PTR = -1;
void traverse(const string& root)
{
string search = root;
if (search.empty()) search += ".\\";
else if (search[search.size()-1] != '\\') search += "\\";
search += "*.*";
__finddata64_t fd;
intptr_t ptr = _findfirst64(search.c_str(), &fd);
if (ptr == INVALID_PTR) return;
do
{
string filename = fd.name;
if (fd.attrib & _A_SUBDIR)
{
cout << "Dir : " << filename << endl;
if (filename != "." && filename != "..")
traverse(search.substr(0, search.size()-3) + filename);
}
else
{
cout << "File : " << filename << endl;
}
}
while (_findnext64(ptr, &fd) == 0);
findclose(ptr);
}
2 MFC
ÄÄÆÄÀÏÇØº¸Áöµµ ¾Ê¾Ò´Ù. ±×³É Àû¾î³õÀº °Å¶ó¼ ¿¡·¯°¡ ÀÖÀ» ¼öµµ...
void traverse(const string& root)
{
string search = root;
if (search.empty()) search += ".\\";
else if (search[search.size()-1] != '\\') search += "\\";
search += "*.*";
CFileFind ff;
if (!ff.FindFile(search.c_str()))
return;
do
{
if (ff.isDirectory())
{
cout << "Dir:" << ff.GetFileName() << endl;
if (!ff.isDots())
{
traverse(search.substr(0, search.size()-3) + ff.GetFileName());
}
}
else
{
cout << "File:" << ff.GetFileName() << endl;
}
}
while (ff.FindNextFile());
}
3 C++ Builder
void traverse(const string& root)
{
string search = root;
string original = root;
if (search.empty())
{
search += ".\\";
original += ".\\";
}
else if (search[search.size()-1] != '\\')
{
search += "\\";
original += "\\";
}
search += "*.*";
TSearchRec SearchRecord;
if (FindFirst(search.c_str(), faDirectory, SearchRecord) != 0)
return;
do
{
string filename = SearchRecord.Name.c_str();
if ((SearchRecord.Attr & faDirectory) == faDirectory)
{
cout << "Dir : " << filename << endl;
if (filename != "." && filename != "..")
{
string NewSearchDir = original + filename;
traverse(NewSearchDir);
}
}
else
{
cout << "File : " << filename << endl;
}
}
while (FindNext(SearchRecord) == 0);
FindClose(SearchRecord);
}
4 UNIX
#include <sys/types.h>
#include <sys/stat.h>
#include <dirent.h>
void traverse(const string& root)
{
DIR* dir = opendir(root.c_str());
if (dir == NULL) return;
struct dirent* ent;
while ((ent = readdir(dir)) != NULL)
{
string filename = ent->d_name;
if (filename == "." || filename == "..")
continue;
string fullname = root + "/" + filename;
struct stat s;
stat(fullname.c_str(), &s);
if (S_ISDIR(s.st_mode))
{
cout << "Dir : " << fullname << endl;
traverse(fullname);
}
else if (S_ISREG(s.st_mode))
{
cout << "File : " << fullname << endl;
}
}
closedir(dir);
}
Linux programming: Reading directories
5 Python
import os
def callback(arg, directory, files):
for file in files:
full_name = os.path.join(directory, file)
if os.path.isfile(full_name):
print "File : ", full_name, repr(arg)
elif os.path.isdir(full_name):
print "Dir : ", full_name, repr(arg)
os.path.walk("C:\\Somewhere", callback, "user data") ÄÝ¹é ±¸Á¶¶ó Á» ³ÀâÇѵ¥, °£´ÜÇÏ°Ô °¡·Á¸é ¾Æ·¡¿Í °°Àº ¹æ¹ýµµ ÀÖ´Ù.
import os
def traverse(path):
if path[-1] != os.sep:
path += os.sep
fileList = []
for name in os.listdir(path):
full_name = path + name
if os.path.isdir(full_name):
fileList += traverse(full_name)
else:
fileList.append(full_name)
return fileList ÆÄÀÏ À̸§ÀÇ ¸®½ºÆ®¸¦ ¹ÝȯÇϱ⠶§¹®¿¡ ½ÇÁ¦ 󸮴 ¸®½ºÆ®¸¦ ¹Þ¾Æ¼ ¼öÇàÇØ¾ß ÇÑ´Ù.
6 Ruby
def traverse(path)
Dir.foreach(path) { |name|
next if name == '.' or name == '..'
full_name = File.join(path, name)
case File.ftype(full_name)
when "file"
print("File : #{full_name}\n")
when "directory"
print("Dir : #{full_name}\n")
traverse(full_name)
end
}
end
traverse("C:\\Somewhere")
7 Windows VB Script
Set Fso = CreateObject("Scripting.FileSystemObject")
Sub Traverse(path)
Set folder = Fso.GetFolder(path)
Set files = folder.Files
Set subfolders = folder.SubFolders
For Each file In files
WScript.Echo "File : " & file
Next
For Each subfolder In subfolders
WScript.Echo "Dir : " & subfolder
Traverse subfolder.Path
Next
End Sub
Traverse "C:\Somewhere"
SeriousMoin v1 (koMoinMoin 1.0a4 Modified)