You are not logged in.

#1 2010-05-16 10:19:35

lswest
Member
From: Munich, Germany
Registered: 2008-06-14
Posts: 456
Website

[SOLVED]Recursive directory traversal in C++

*EDIT* Fixed code is in a post further down
I'm currently in the process of writing a recursive implementation of a functional method to list all files within a directory.  This is mainly for practice, but I will probably end up using it in a few projects if I get it working.  I'd appreciate any pointers/suggestions as to how I could fix the error I have run into with recursion in the dirReadLin.h header file.  I'll probably be able to sort out any other issues after that, but this is the issue that's stumped me.  Maybe I've just been staring at it so long it I've started to overlook the error.  I'd also greatly appreciate an explanation of what I did wrong, if time allows.  Thanks in advance to any suggestions!  Also, I think I included everything relevant in this post, but if there's anything missing, I'll gladly supply more information where required.
So far the only result I get from my current method is this:

./id3lib
./id3lib
./id3lib
./id3lib
./id3lib
./id3lib
./id3lib
./id3lib
./id3lib
./id3lib
./id3lib
./id3lib
./id3lib
./id3lib
./id3lib
./id3lib
./id3lib
./id3lib
./id3lib
./id3lib
./id3lib
./id3lib
./id3lib
./id3lib
./id3lib
./id3lib
./id3lib
./id3lib
./id3lib
./id3lib
./id3lib
./id3lib
./id3lib
./id3lib
./id3lib
./id3lib
./id3lib
./id3lib
./id3lib
./id3lib
./id3lib
./id3lib
./id3lib
./id3lib
./id3lib
./id3lib
./id3lib
./id3lib
./id3lib
./id3lib
./id3lib
./id3lib
./id3lib
./id3lib
./id3lib
./id3lib
./id3lib
./id3lib
./id3lib
./id3lib
./id3lib
./id3lib
./id3lib
./id3lib
./id3lib
./id3lib
./id3lib
./id3lib
./id3lib
./id3lib
./id3lib
./id3lib
./id3lib
./id3lib
./id3lib
./id3lib
./id3lib
./id3lib
./id3lib
./id3lib
./id3lib
./id3lib
./id3lib
./id3lib
./id3lib
./id3lib
./id3lib
./id3lib
./id3lib
./id3lib
./id3lib
./id3lib
./id3lib
./id3lib
./id3lib
./id3lib
./id3lib
./id3lib
./id3lib
./id3lib
./id3lib
./id3lib
./id3lib
./id3lib
./id3lib
./id3lib
./id3lib
./id3lib
./id3lib
./id3lib
./id3lib
./id3lib
./id3lib
./id3lib
./id3lib
./id3lib
./id3lib
./id3lib
./id3lib
./id3lib
./id3lib
./id3lib
./id3lib
./id3lib
./id3lib
./id3lib
./id3lib
./id3lib
./id3lib
./id3lib
./id3lib
./id3lib
./id3lib
./id3lib
./id3lib
./id3lib
./id3lib
./id3lib
./id3lib
./id3lib
./id3lib
./id3lib
./id3lib
./id3lib
./id3lib
./id3lib
./id3lib
./id3lib
./id3lib
./id3lib
./id3lib
./id3lib
./id3lib
./id3lib
./id3lib
./id3lib
./id3lib
./id3lib
./id3lib
./id3lib
./id3lib
./id3lib
./id3lib
./id3lib
./id3lib
./id3lib
./id3lib
./id3lib
./id3lib
./id3lib
./id3lib
./id3lib
./id3lib
./id3lib
./id3lib
./id3lib
./id3lib
./id3lib
./id3lib
./id3lib
./id3lib
./id3lib
./id3lib
./id3lib
./id3lib
./id3lib
./id3lib
./id3lib
./id3lib
./id3lib
./id3lib
./id3lib
./id3lib
./id3lib
./id3lib
./id3lib
./id3lib
./id3lib
./id3lib
./id3lib
./id3lib
./id3lib
./id3lib
./id3lib
./id3lib
./id3lib
./id3lib
./id3lib
./id3lib
./id3lib
./id3lib
./id3lib
./id3lib
./id3lib
./id3lib
./id3lib
./id3lib
./id3lib
./id3lib
./id3lib
./id3lib
./id3lib
./id3lib
./id3lib
./id3lib
./id3lib
./id3lib
./id3lib
./id3lib
./id3lib
./id3lib
./id3lib
./id3lib
./id3lib
./id3lib
./id3lib
./id3lib
./id3lib
./id3lib
./id3lib
./id3lib
./id3lib
./id3lib
./id3lib
./id3lib
./id3lib
./id3lib
./id3lib
./id3lib
./id3lib
./id3lib
./id3lib
./id3lib
./id3lib
./id3lib
./id3lib
./id3lib
./id3lib
./id3lib
./id3lib
./id3lib
./id3lib
./id3lib
./id3lib
./id3lib
./id3lib
./id3lib
./id3lib
./id3lib
./id3lib
./id3lib
./id3lib
./id3lib
./id3lib
./id3lib
./id3lib
./id3lib
./id3lib
./id3lib
./id3lib
./id3lib
./id3lib
./id3lib
./id3lib
./id3lib
./id3lib
./id3lib
./id3lib
./id3lib
./id3lib
./id3lib
./id3lib
./id3lib
./id3lib
./id3lib
./id3lib
./id3lib
./id3lib
./id3lib
./id3lib
./id3lib
./id3lib
./id3lib
./id3lib
./id3lib
./id3lib
./id3lib
./id3lib
./id3lib
./id3lib
./id3lib
./id3lib
./id3lib
./id3lib
./id3lib
./id3lib
./id3lib
./id3lib
./id3lib
./id3lib
./id3lib
./id3lib
./id3lib
./id3lib
./id3lib
./id3lib
./id3lib
./id3lib
./id3lib
./id3lib
./id3lib
./id3lib
./id3lib
./id3lib
./id3lib
./id3lib
./id3lib
./id3lib
./id3lib
./id3lib
./id3lib
./id3lib
./id3lib
./id3lib
./id3lib
./id3lib
./id3lib
./id3lib
./id3lib
./id3lib
./id3lib
./id3lib
./id3lib
./id3lib
./id3lib
./id3lib
./id3lib
./id3lib
./id3lib
./id3lib
./id3lib
./id3lib
./id3lib
./id3lib
./id3lib
./id3lib
./id3lib
./id3lib
./id3lib
./id3lib
./id3lib
./id3lib
./id3lib
./id3lib
./id3lib
./id3lib
./id3lib
./id3lib
./id3lib
./id3lib
./id3lib
./id3lib
./id3lib
./id3lib
./id3lib
./id3lib
./id3lib
./id3lib
./id3lib
./id3lib
./id3lib
./id3lib
./id3lib
./id3lib
./id3lib
./id3lib
./id3lib
./id3lib
./id3lib
./id3lib
./id3lib
./id3lib
./id3lib
./id3lib
./id3lib
./id3lib
./id3lib
./id3lib
./id3lib
./id3lib
./id3lib
./id3lib
./id3lib
./id3lib
./id3lib
./id3lib
./id3lib
./id3lib
./id3lib
./id3lib
./id3lib
./id3lib
./id3lib
./id3lib
./id3lib
./id3lib
./id3lib
./id3lib
./id3lib
./id3lib
./id3lib
./id3lib
./id3lib
./id3lib
./id3lib
./id3lib
./id3lib
./id3lib
./id3lib
./id3lib
./id3lib
./id3lib
./id3lib
./id3lib
./id3lib
./id3lib
./id3lib
./id3lib
./id3lib
./id3lib
./id3lib
./id3lib
./id3lib
./id3lib
./id3lib
./id3lib
./id3lib
./id3lib
./id3lib
./id3lib
./id3lib
./id3lib
./id3lib
./id3lib
./id3lib
./id3lib
./id3lib
./id3lib
./id3lib
./id3lib
./id3lib
./id3lib
./id3lib
./id3lib
./id3lib
./id3lib
./id3lib
./id3lib
./id3lib
./id3lib
./id3lib
./id3lib
./id3lib
./id3lib
./id3lib
./id3lib
./id3lib
./id3lib
./id3lib
./id3lib
./id3lib
./id3lib
./id3lib
./id3lib
./id3lib
./id3lib
./id3lib
./id3lib
./id3lib
./id3lib
./id3lib
./id3lib
./id3lib
./id3lib
./id3lib
./id3lib
./id3lib
./id3lib
./id3lib
./id3lib
./id3lib
./id3lib
./id3lib
./id3lib
./id3lib
./id3lib
./id3lib
./id3lib
./id3lib
./id3lib
./id3lib
./id3lib
./id3lib
./id3lib
./id3lib
./id3lib
./id3lib
./id3lib
./id3lib
./id3lib
./id3lib
./id3lib
./id3lib
./id3lib
./id3lib
./id3lib
./id3lib
./id3lib
./id3lib
./id3lib
./id3lib
./id3lib
./id3lib
./id3lib
./id3lib
./id3lib
./id3lib
./id3lib
./id3lib
./id3lib
./id3lib
./id3lib
./id3lib
./id3lib
./id3lib
./id3lib
./id3lib
./id3lib
./id3lib
./id3lib
./id3lib
./id3lib
./id3lib
./id3lib
./id3lib
./id3lib
./id3lib
./id3lib
./id3lib
./id3lib
./id3lib
./id3lib
./id3lib
./id3lib
./id3lib
./id3lib
./id3lib
./id3lib
./id3lib
./id3lib
./id3lib
./id3lib
./id3lib
./id3lib
./id3lib
./id3lib
./id3lib
./id3lib
./id3lib
./id3lib
./id3lib
./id3lib
./id3lib
./id3lib
./id3lib
./id3lib
./id3lib
./id3lib
./id3lib
./id3lib
./id3lib
./id3lib
./id3lib
./id3lib
./id3lib
./id3lib
./id3lib
./id3lib
./id3lib
./id3lib
./id3lib
./id3lib
./id3lib
./id3lib
./id3lib
./id3lib
./id3lib
./id3lib
./id3lib
./id3lib
./id3lib
./id3lib
./id3lib
./id3lib
./id3lib
./id3lib
./id3lib
./id3lib
./id3lib
./id3lib
./id3lib
./id3lib
./id3lib
./id3lib
./id3lib
./id3lib
./id3lib
./id3lib
./id3lib
./id3lib
./id3lib
./id3lib
./id3lib
./id3lib
./id3lib
./id3lib
./id3lib
./id3lib
./id3lib
./id3lib
./id3lib
./id3lib
./id3lib
./id3lib
./id3lib
./id3lib
./id3lib
./id3lib
./id3lib
./id3lib
./id3lib
./id3lib
./id3lib
./id3lib
./id3lib
./id3lib
./id3lib
./id3lib
./id3lib
./id3lib
./id3lib
./id3lib
./id3lib
./id3lib
./id3lib
./id3lib
./id3lib
./id3lib
./id3lib
./id3lib
./id3lib
./id3lib
./id3lib
./id3lib
./id3lib
./id3lib
./id3lib
./id3lib
./id3lib
./id3lib
./id3lib
./id3lib
./id3lib
./id3lib
./id3lib
./id3lib
./id3lib
./id3lib
./id3lib
./id3lib
./id3lib
./id3lib
./id3lib
./id3lib
./id3lib
./id3lib
./id3lib
./id3lib
./id3lib
./id3lib
./id3lib
./id3lib
./id3lib
./id3lib
./id3lib
./id3lib
./id3lib
./id3lib
./id3lib
./id3lib
./id3lib
./id3lib
./id3lib
./id3lib
./id3lib
./id3lib
./id3lib
./id3lib
./id3lib
./id3lib
./id3lib
./id3lib
./id3lib
./id3lib
./id3lib
./id3lib
./id3lib
./id3lib
./id3lib
./id3lib
./id3lib
./id3lib
./id3lib
./id3lib
./id3lib
./id3lib
./id3lib
./id3lib
./id3lib
./id3lib
./id3lib
./id3lib
./id3lib
./id3lib
./id3lib
./id3lib
./id3lib
./id3lib
./id3lib
./id3lib
./id3lib
./id3lib
./id3lib
./id3lib
./id3lib
./id3lib
./id3lib
./id3lib
./id3lib
./id3lib
./id3lib
./id3lib
./id3lib
./id3lib
./id3lib
./id3lib
./id3lib
./id3lib
./id3lib
./id3lib
./id3lib
./id3lib
./id3lib
./id3lib
./id3lib
./id3lib
./id3lib
./id3lib
./id3lib
./id3lib
./id3lib
./id3lib
./id3lib
./id3lib
./id3lib
./id3lib
./id3lib
./id3lib
./id3lib
./id3lib
./id3lib
./id3lib
./id3lib
./id3lib
./id3lib
./id3lib
./id3lib
./id3lib
./id3lib
./id3lib
./id3lib
./id3lib
./id3lib
./id3lib
./id3lib
./id3lib
./id3lib
./id3lib
./id3lib
./id3lib
./id3lib
./id3lib
./id3lib
./id3lib
./id3lib
./id3lib
./id3lib
./id3lib
./id3lib
./id3lib
./id3lib
./id3lib
./id3lib
./id3lib
./id3lib
./id3lib
./id3lib
./id3lib
./id3lib
./id3lib
./id3lib
./id3lib
./id3lib
./id3lib
./id3lib
./id3lib
./id3lib
./id3lib
./id3lib
./id3lib
./id3lib
./id3lib
./id3lib
./id3lib
./id3lib
./id3lib
./id3lib
./id3lib
./id3lib
./id3lib
./id3lib
./id3lib
./id3lib
./id3lib
./id3lib
./id3lib
./id3lib
./id3lib
./id3lib
./id3lib
./id3lib
./id3lib
./id3lib
./id3lib
./id3lib
./id3lib
./id3lib
./id3lib
./id3lib
./id3lib
./id3lib
./id3lib
./id3lib
./id3lib
./id3lib
./id3lib
./id3lib
./id3lib
./id3lib
./id3lib
./id3lib
./id3lib
./id3lib
./id3lib
./id3lib
./id3lib
./id3lib
./id3lib
./id3lib
./id3lib
./id3lib
./id3lib
./id3lib
./id3lib
./id3lib
./id3lib
./id3lib
./id3lib
./id3lib
./id3lib
./id3lib
./id3lib
./id3lib
./id3lib
./id3lib
./id3lib
./id3lib
./id3lib
./id3lib
./id3lib
./id3lib
./id3lib
./id3lib
./id3lib
./id3lib
./id3lib
./id3lib
./id3lib
./id3lib
./id3lib
./id3lib
./id3lib
./id3lib
./id3lib
./id3lib
./id3lib
./id3lib
./id3lib
./id3lib
./id3lib
./id3lib
./id3lib
./id3lib
./id3lib
./id3lib
./id3lib
./id3lib
./id3lib
./id3lib
./id3lib
./id3lib
./id3lib
./id3lib
./id3lib
./id3lib
./id3lib
./id3lib
./id3lib
./id3lib
./id3lib
./id3lib
./id3lib
./id3lib
./id3lib
./id3lib
./id3lib
./id3lib
./id3lib
./id3lib
./id3lib
./id3lib
./id3lib
./id3lib
./id3lib
./id3lib
./id3lib
./id3lib
./id3lib
./id3lib
./id3lib
./id3lib
./id3lib
./id3lib
./id3lib
./id3lib
./id3lib
./id3lib
./id3lib
./id3lib
./id3lib
./id3lib
./id3lib
./id3lib
./id3lib
./id3lib
./id3lib
./id3lib
./id3lib
./id3lib
./id3lib
./id3lib
./id3lib
./id3lib
./id3lib
./id3lib
./id3lib
./id3lib
./id3lib
./id3lib
./id3lib
./id3lib
./id3lib
./id3lib
./id3lib
./id3lib
./id3lib
./id3lib
./id3lib
./id3lib
./id3lib
./id3lib
countch.cpp
output.txt
hello.exe
countch.exe
getenv.cpp
id3lib
a.out
fibonacci_console_only.exe
Projects
dirReadLin.h
mp3tag.h
test.cpp
fibonacci2.exe
getenv
fibonacci.cpp
curltest
dirRead.h
test.exe
curltest.cpp
list
hello.cpp
fibonacci
list.cpp
music_generator.cpp
id3lib-3.8.3binaries
id3lib-3.8.3binaries
id3lib-3.8.3binaries
id3lib-3.8.3binaries
id3lib-3.8.3binaries
id3lib-3.8.3binaries
id3lib-3.8.3binaries
id3lib-3.8.3binaries
id3lib-3.8.3binaries
id3lib-3.8.3binaries
id3lib-3.8.3binaries
id3lib-3.8.3binaries
id3lib-3.8.3binaries
id3lib-3.8.3binaries
id3lib-3.8.3binaries
id3lib-3.8.3binaries
id3lib-3.8.3binaries
id3lib-3.8.3binaries
id3lib-3.8.3binaries
id3lib-3.8.3binaries
id3lib-3.8.3binaries
id3lib-3.8.3binaries
id3lib-3.8.3binaries
id3lib-3.8.3binaries
id3lib-3.8.3binaries
id3lib-3.8.3binaries
id3lib-3.8.3binaries
id3lib-3.8.3binaries
id3lib-3.8.3binaries
id3lib-3.8.3binaries
id3lib-3.8.3binaries
id3lib-3.8.3binaries
id3lib-3.8.3binaries
id3lib-3.8.3binaries
id3lib-3.8.3binaries
id3lib-3.8.3binaries
id3lib-3.8.3binaries
id3lib-3.8.3binaries
id3lib-3.8.3binaries
id3lib-3.8.3binaries
id3lib-3.8.3binaries
id3lib-3.8.3binaries
id3lib-3.8.3binaries
id3lib-3.8.3binaries
id3lib-3.8.3binaries
id3lib-3.8.3binaries
id3lib-3.8.3binaries
id3lib-3.8.3binaries
id3lib-3.8.3binaries
id3lib-3.8.3binaries
id3lib-3.8.3binaries
id3lib-3.8.3binaries
id3lib-3.8.3binaries
id3lib-3.8.3binaries
id3lib-3.8.3binaries
id3lib-3.8.3binaries
id3lib-3.8.3binaries
id3lib-3.8.3binaries
id3lib-3.8.3binaries
id3lib-3.8.3binaries
id3lib-3.8.3binaries
id3lib-3.8.3binaries
id3lib-3.8.3binaries
id3lib-3.8.3binaries
id3lib-3.8.3binaries
id3lib-3.8.3binaries
id3lib-3.8.3binaries
id3lib-3.8.3binaries
id3lib-3.8.3binaries
id3lib-3.8.3binaries
id3lib-3.8.3binaries
id3lib-3.8.3binaries
id3lib-3.8.3binaries
id3lib-3.8.3binaries
id3lib-3.8.3binaries
id3lib-3.8.3binaries
id3lib-3.8.3binaries
id3lib-3.8.3binaries
id3lib-3.8.3binaries
id3lib-3.8.3binaries
id3lib-3.8.3binaries
id3lib-3.8.3binaries
id3lib-3.8.3binaries
id3lib-3.8.3binaries
id3lib-3.8.3binaries
id3lib-3.8.3binaries
id3lib-3.8.3binaries
id3lib-3.8.3binaries
id3lib-3.8.3binaries
id3lib-3.8.3binaries
id3lib-3.8.3binaries
id3lib-3.8.3binaries
id3lib-3.8.3binaries
id3lib-3.8.3binaries
id3lib-3.8.3binaries
id3lib-3.8.3binaries
id3lib-3.8.3binaries
id3lib-3.8.3binaries
id3lib-3.8.3binaries
id3lib-3.8.3binaries
id3lib-3.8.3binaries
id3lib-3.8.3binaries
id3lib-3.8.3binaries
id3lib-3.8.3binaries
id3lib-3.8.3binaries
id3lib-3.8.3binaries
id3lib-3.8.3binaries
id3lib-3.8.3binaries
id3lib-3.8.3binaries
id3lib-3.8.3binaries
id3lib-3.8.3binaries
id3lib-3.8.3binaries
id3lib-3.8.3binaries
id3lib-3.8.3binaries
id3lib-3.8.3binaries
id3lib-3.8.3binaries
id3lib-3.8.3binaries
id3lib-3.8.3binaries
id3lib-3.8.3binaries
id3lib-3.8.3binaries
id3lib-3.8.3binaries
id3lib-3.8.3binaries
id3lib-3.8.3binaries
id3lib-3.8.3binaries
id3lib-3.8.3binaries
id3lib-3.8.3binaries
id3lib-3.8.3binaries
id3lib-3.8.3binaries
id3lib-3.8.3binaries
id3lib-3.8.3binaries
id3lib-3.8.3binaries
id3lib-3.8.3binaries
id3lib-3.8.3binaries
id3lib-3.8.3binaries
id3lib-3.8.3binaries
id3lib-3.8.3binaries
id3lib-3.8.3binaries
id3lib-3.8.3binaries
id3lib-3.8.3binaries
id3lib-3.8.3binaries
id3lib-3.8.3binaries
id3lib-3.8.3binaries
id3lib-3.8.3binaries
id3lib-3.8.3binaries
id3lib-3.8.3binaries
id3lib-3.8.3binaries
id3lib-3.8.3binaries
id3lib-3.8.3binaries
id3lib-3.8.3binaries
id3lib-3.8.3binaries
id3lib-3.8.3binaries
id3lib-3.8.3binaries
id3lib-3.8.3binaries
id3lib-3.8.3binaries
id3lib-3.8.3binaries
id3lib-3.8.3binaries
id3lib-3.8.3binaries
id3lib-3.8.3binaries
id3lib-3.8.3binaries
id3lib-3.8.3binaries
id3lib-3.8.3binaries
id3lib-3.8.3binaries
id3lib-3.8.3binaries
id3lib-3.8.3binaries
id3lib-3.8.3binaries
id3lib-3.8.3binaries
id3lib-3.8.3binaries
id3lib-3.8.3binaries
id3lib-3.8.3binaries
id3lib-3.8.3binaries
id3lib-3.8.3binaries
id3lib-3.8.3binaries
id3lib-3.8.3binaries
id3lib-3.8.3binaries
id3lib-3.8.3binaries
id3lib-3.8.3binaries
id3lib-3.8.3binaries
id3lib-3.8.3binaries
id3lib-3.8.3binaries
id3lib-3.8.3binaries
id3lib-3.8.3binaries
id3lib-3.8.3binaries
id3lib-3.8.3binaries
id3lib-3.8.3binaries
id3lib-3.8.3binaries
id3lib-3.8.3binaries
id3lib-3.8.3binaries
id3lib-3.8.3binaries
id3lib-3.8.3binaries
id3lib-3.8.3binaries
id3lib-3.8.3binaries
id3lib-3.8.3binaries
id3lib-3.8.3binaries
id3lib-3.8.3binaries
id3lib-3.8.3binaries
id3lib-3.8.3binaries
id3lib-3.8.3binaries
id3lib-3.8.3binaries
id3lib-3.8.3binaries
id3lib-3.8.3binaries
id3lib-3.8.3binaries
id3lib-3.8.3binaries
id3lib-3.8.3binaries
id3lib-3.8.3binaries
id3lib-3.8.3binaries
id3lib-3.8.3binaries
id3lib-3.8.3binaries
id3lib-3.8.3binaries
id3lib-3.8.3binaries
id3lib-3.8.3binaries
id3lib-3.8.3binaries
id3lib-3.8.3binaries
id3lib-3.8.3binaries
id3lib-3.8.3binaries
id3lib-3.8.3binaries
id3lib-3.8.3binaries
id3lib-3.8.3binaries
id3lib-3.8.3binaries
id3lib-3.8.3binaries
id3lib-3.8.3binaries
id3lib-3.8.3binaries
id3lib-3.8.3binaries
id3lib-3.8.3binaries
id3lib-3.8.3binaries
id3lib-3.8.3binaries
id3lib-3.8.3binaries
id3lib-3.8.3binaries
id3lib-3.8.3binaries
id3lib-3.8.3binaries
id3lib-3.8.3binaries
id3lib-3.8.3binaries
id3lib-3.8.3binaries
id3lib-3.8.3binaries
id3lib-3.8.3binaries
id3lib-3.8.3binaries
id3lib-3.8.3binaries
id3lib-3.8.3binaries
id3lib-3.8.3binaries
id3lib-3.8.3binaries
id3lib-3.8.3binaries
id3lib-3.8.3binaries
id3lib-3.8.3binaries
id3lib-3.8.3binaries
id3lib-3.8.3binaries
id3lib-3.8.3binaries
id3lib-3.8.3binaries
id3lib-3.8.3binaries
id3lib-3.8.3binaries
id3lib-3.8.3binaries
id3lib-3.8.3binaries
id3lib-3.8.3binaries
id3lib-3.8.3binaries
id3lib-3.8.3binaries
id3lib-3.8.3binaries
id3lib-3.8.3binaries
id3lib-3.8.3binaries
id3lib-3.8.3binaries
id3lib-3.8.3binaries
id3lib-3.8.3binaries
id3lib-3.8.3binaries
id3lib-3.8.3binaries
id3lib-3.8.3binaries
id3lib-3.8.3binaries
id3lib-3.8.3binaries
id3lib-3.8.3binaries
id3lib-3.8.3binaries
id3lib-3.8.3binaries
id3lib-3.8.3binaries
id3lib-3.8.3binaries
id3lib-3.8.3binaries
id3lib-3.8.3binaries
id3lib-3.8.3binaries
id3lib-3.8.3binaries
id3lib-3.8.3binaries
id3lib-3.8.3binaries
id3lib-3.8.3binaries
id3lib-3.8.3binaries
id3lib-3.8.3binaries
id3lib-3.8.3binaries
id3lib-3.8.3binaries
id3lib-3.8.3binaries
id3lib-3.8.3binaries
id3lib-3.8.3binaries
id3lib-3.8.3binaries
id3lib-3.8.3binaries
id3lib-3.8.3binaries
id3lib-3.8.3binaries
id3lib-3.8.3binaries
id3lib-3.8.3binaries
id3lib-3.8.3binaries
id3lib-3.8.3binaries
id3lib-3.8.3binaries
id3lib-3.8.3binaries
id3lib-3.8.3binaries
id3lib-3.8.3binaries
id3lib-3.8.3binaries
id3lib-3.8.3binaries
id3lib-3.8.3binaries
id3lib-3.8.3binaries
id3lib-3.8.3binaries
id3lib-3.8.3binaries
id3lib-3.8.3binaries
id3lib-3.8.3binaries
id3lib-3.8.3binaries
id3lib-3.8.3binaries
id3lib-3.8.3binaries
id3lib-3.8.3binaries
id3lib-3.8.3binaries
id3lib-3.8.3binaries
id3lib-3.8.3binaries
id3lib-3.8.3binaries
id3lib-3.8.3binaries
id3lib-3.8.3binaries
id3lib-3.8.3binaries
id3lib-3.8.3binaries
id3lib-3.8.3binaries
id3lib-3.8.3binaries
id3lib-3.8.3binaries
id3lib-3.8.3binaries
id3lib-3.8.3binaries
id3lib-3.8.3binaries
id3lib-3.8.3binaries
id3lib-3.8.3binaries
id3lib-3.8.3binaries
id3lib-3.8.3binaries
id3lib-3.8.3binaries
id3lib-3.8.3binaries
id3lib-3.8.3binaries
id3lib-3.8.3binaries
id3lib-3.8.3binaries
id3lib-3.8.3binaries
id3lib-3.8.3binaries
id3lib-3.8.3binaries
id3lib-3.8.3binaries
id3lib-3.8.3binaries
id3lib-3.8.3binaries
id3lib-3.8.3binaries
id3lib-3.8.3binaries
id3lib-3.8.3binaries
id3lib-3.8.3binaries
id3lib-3.8.3binaries
id3lib-3.8.3binaries
id3lib-3.8.3binaries
id3lib-3.8.3binaries
id3lib-3.8.3binaries
id3lib-3.8.3binaries
id3lib-3.8.3binaries
id3lib-3.8.3binaries
id3lib-3.8.3binaries
id3lib-3.8.3binaries
id3lib-3.8.3binaries
id3lib-3.8.3binaries
id3lib-3.8.3binaries
id3lib-3.8.3binaries
id3lib-3.8.3binaries
id3lib-3.8.3binaries
id3lib-3.8.3binaries
id3lib-3.8.3binaries
id3lib-3.8.3binaries
id3lib-3.8.3binaries
id3lib-3.8.3binaries
id3lib-3.8.3binaries
id3lib-3.8.3binaries
id3lib-3.8.3binaries
id3lib-3.8.3binaries
id3lib-3.8.3binaries
id3lib-3.8.3binaries
id3lib-3.8.3binaries
id3lib-3.8.3binaries
id3lib-3.8.3binaries
id3lib-3.8.3binaries
id3lib-3.8.3binaries
id3lib-3.8.3binaries
id3lib-3.8.3binaries
id3lib-3.8.3binaries
id3lib-3.8.3binaries
id3lib-3.8.3binaries
id3lib-3.8.3binaries
id3lib-3.8.3binaries
id3lib-3.8.3binaries
id3lib-3.8.3binaries
id3lib-3.8.3binaries
id3lib-3.8.3binaries
id3lib-3.8.3binaries
id3lib-3.8.3binaries
id3lib-3.8.3binaries
id3lib-3.8.3binaries
id3lib-3.8.3binaries
id3lib-3.8.3binaries
id3lib-3.8.3binaries
id3lib-3.8.3binaries
id3lib-3.8.3binaries
id3lib-3.8.3binaries
id3lib-3.8.3binaries
id3lib-3.8.3binaries
id3lib-3.8.3binaries
id3lib-3.8.3binaries
id3lib-3.8.3binaries
id3lib-3.8.3binaries
id3lib-3.8.3binaries
id3lib-3.8.3binaries
id3lib-3.8.3binaries
id3lib-3.8.3binaries
id3lib-3.8.3binaries
id3lib-3.8.3binaries
id3lib-3.8.3binaries
id3lib-3.8.3binaries
id3lib-3.8.3binaries
id3lib-3.8.3binaries
id3lib-3.8.3binaries
id3lib-3.8.3binaries
id3lib-3.8.3binaries
id3lib-3.8.3binaries
id3lib-3.8.3binaries
id3lib-3.8.3binaries
id3lib-3.8.3binaries
id3lib-3.8.3binaries
id3lib-3.8.3binaries
id3lib-3.8.3binaries
id3lib-3.8.3binaries
id3lib-3.8.3binaries
id3lib-3.8.3binaries
id3lib-3.8.3binaries
id3lib-3.8.3binaries
id3lib-3.8.3binaries
id3lib-3.8.3binaries
id3lib-3.8.3binaries
id3lib-3.8.3binaries
id3lib-3.8.3binaries
id3lib-3.8.3binaries
id3lib-3.8.3binaries
id3lib-3.8.3binaries
id3lib-3.8.3binaries
id3lib-3.8.3binaries
id3lib-3.8.3binaries
id3lib-3.8.3binaries
id3lib-3.8.3binaries
id3lib-3.8.3binaries
id3lib-3.8.3binaries
id3lib-3.8.3binaries
id3lib-3.8.3binaries
id3lib-3.8.3binaries
id3lib-3.8.3binaries
id3lib-3.8.3binaries
id3lib-3.8.3binaries
id3lib-3.8.3binaries
id3lib-3.8.3binaries
id3lib-3.8.3binaries
id3lib-3.8.3binaries
id3lib-3.8.3binaries
id3lib-3.8.3binaries
id3lib-3.8.3binaries
id3lib-3.8.3binaries
id3lib-3.8.3binaries
id3lib-3.8.3binaries
id3lib-3.8.3binaries
id3lib-3.8.3binaries
id3lib-3.8.3binaries
id3lib-3.8.3binaries
id3lib-3.8.3binaries
id3lib-3.8.3binaries
id3lib-3.8.3binaries
id3lib-3.8.3binaries
id3lib-3.8.3binaries
id3lib-3.8.3binaries
id3lib-3.8.3binaries
id3lib-3.8.3binaries
id3lib-3.8.3binaries
id3lib-3.8.3binaries
id3lib-3.8.3binaries
id3lib-3.8.3binaries
id3lib-3.8.3binaries
id3lib-3.8.3binaries
id3lib-3.8.3binaries
id3lib-3.8.3binaries
id3lib-3.8.3binaries
id3lib-3.8.3binaries
id3lib-3.8.3binaries
id3lib-3.8.3binaries
id3lib-3.8.3binaries
id3lib-3.8.3binaries
id3lib-3.8.3binaries
id3lib-3.8.3binaries
id3lib-3.8.3binaries
id3lib-3.8.3binaries
id3lib-3.8.3binaries
id3lib-3.8.3binaries
id3lib-3.8.3binaries
id3lib-3.8.3binaries
id3lib-3.8.3binaries
id3lib-3.8.3binaries
id3lib-3.8.3binaries
id3lib-3.8.3binaries
id3lib-3.8.3binaries
id3lib-3.8.3binaries
id3lib-3.8.3binaries
id3lib-3.8.3binaries
id3lib-3.8.3binaries
id3lib-3.8.3binaries
id3lib-3.8.3binaries
id3lib-3.8.3binaries
id3lib-3.8.3binaries
id3lib-3.8.3binaries
id3lib-3.8.3binaries
id3lib-3.8.3binaries
id3lib-3.8.3binaries
id3lib-3.8.3binaries
id3lib-3.8.3binaries
id3lib-3.8.3binaries
id3lib-3.8.3binaries
id3lib-3.8.3binaries
id3lib-3.8.3binaries
id3lib-3.8.3binaries
id3lib-3.8.3binaries
id3lib-3.8.3binaries
id3lib-3.8.3binaries
id3lib-3.8.3binaries
id3lib-3.8.3binaries
id3lib-3.8.3binaries
id3lib-3.8.3binaries
id3lib-3.8.3binaries
id3lib-3.8.3binaries
id3lib-3.8.3binaries
id3lib-3.8.3binaries
id3lib-3.8.3binaries
id3lib-3.8.3binaries
id3lib-3.8.3binaries
id3lib-3.8.3binaries
id3lib-3.8.3binaries
id3lib-3.8.3binaries
id3lib-3.8.3binaries
id3lib-3.8.3binaries
id3lib-3.8.3binaries
id3lib-3.8.3binaries
id3lib-3.8.3binaries
id3lib-3.8.3binaries
id3lib-3.8.3binaries
id3lib-3.8.3binaries
id3lib-3.8.3binaries
id3lib-3.8.3binaries
id3lib-3.8.3binaries
id3lib-3.8.3binaries
id3lib-3.8.3binaries
id3lib-3.8.3binaries
id3lib-3.8.3binaries
id3lib-3.8.3binaries
id3lib-3.8.3binaries
id3lib-3.8.3binaries
id3lib-3.8.3binaries
id3lib-3.8.3binaries
id3lib-3.8.3binaries
id3lib-3.8.3binaries
id3lib-3.8.3binaries
id3lib-3.8.3binaries
id3lib-3.8.3binaries
id3lib-3.8.3binaries
id3lib-3.8.3binaries
id3lib-3.8.3binaries
id3lib-3.8.3binaries
id3lib-3.8.3binaries
id3lib-3.8.3binaries
id3lib-3.8.3binaries
id3lib-3.8.3binaries
id3lib-3.8.3binaries
id3lib-3.8.3binaries
id3lib-3.8.3binaries
id3lib-3.8.3binaries
id3lib-3.8.3binaries
id3lib-3.8.3binaries
id3lib-3.8.3binaries
id3lib-3.8.3binaries
id3lib-3.8.3binaries
id3lib-3.8.3binaries
id3lib-3.8.3binaries
id3lib-3.8.3binaries
id3lib-3.8.3binaries
id3lib-3.8.3binaries
id3lib-3.8.3binaries
id3lib-3.8.3binaries
id3lib-3.8.3binaries
id3lib-3.8.3binaries
id3lib-3.8.3binaries
id3lib-3.8.3binaries
id3lib-3.8.3binaries
id3lib-3.8.3binaries
id3lib-3.8.3binaries
id3lib-3.8.3binaries
id3lib-3.8.3binaries
id3lib-3.8.3binaries
id3lib-3.8.3binaries
id3lib-3.8.3binaries
id3lib-3.8.3binaries
id3lib-3.8.3binaries
id3lib-3.8.3binaries
id3lib-3.8.3binaries
id3lib-3.8.3binaries
id3lib-3.8.3binaries
id3lib-3.8.3binaries
id3lib-3.8.3binaries
id3lib-3.8.3binaries
id3lib-3.8.3binaries
id3lib-3.8.3binaries
id3lib-3.8.3binaries
id3lib-3.8.3binaries
id3lib-3.8.3binaries
id3lib-3.8.3binaries
id3lib-3.8.3binaries
id3lib-3.8.3binaries
id3lib-3.8.3binaries
id3lib-3.8.3binaries
id3lib-3.8.3binaries
id3lib-3.8.3binaries
id3lib-3.8.3binaries
id3lib-3.8.3binaries
id3lib-3.8.3binaries
id3lib-3.8.3binaries
id3lib-3.8.3binaries
id3lib-3.8.3binaries
id3lib-3.8.3binaries
id3lib-3.8.3binaries
id3lib-3.8.3binaries
id3lib-3.8.3binaries
id3lib-3.8.3binaries
id3lib-3.8.3binaries
id3lib-3.8.3binaries
id3lib-3.8.3binaries
id3lib-3.8.3binaries
id3lib-3.8.3binaries
id3lib-3.8.3binaries
id3lib-3.8.3binaries
id3lib-3.8.3binaries
id3lib-3.8.3binaries
id3lib-3.8.3binaries
id3lib-3.8.3binaries
id3lib-3.8.3binaries
id3lib-3.8.3binaries
id3lib-3.8.3binaries
id3lib-3.8.3binaries
id3lib-3.8.3binaries
id3lib-3.8.3binaries
id3lib-3.8.3binaries
id3lib-3.8.3binaries
id3lib-3.8.3binaries
id3lib-3.8.3binaries
id3lib-3.8.3binaries
id3lib-3.8.3binaries
id3lib-3.8.3binaries
id3lib-3.8.3binaries
id3lib-3.8.3binaries
id3lib-3.8.3binaries
id3lib-3.8.3binaries
id3lib-3.8.3binaries
id3lib-3.8.3binaries
id3lib-3.8.3binaries
id3lib-3.8.3binaries
id3lib-3.8.3binaries
id3lib-3.8.3binaries
id3lib-3.8.3binaries
id3lib-3.8.3binaries
id3lib-3.8.3binaries
id3lib-3.8.3binaries
id3lib-3.8.3binaries
id3lib-3.8.3binaries
id3lib-3.8.3binaries
id3lib-3.8.3binaries
id3lib-3.8.3binaries
id3lib-3.8.3binaries
id3lib-3.8.3binaries
id3lib-3.8.3binaries
id3lib-3.8.3binaries
id3lib-3.8.3binaries
id3lib-3.8.3binaries
id3lib-3.8.3binaries
id3lib-3.8.3binaries
id3lib-3.8.3binaries
id3lib-3.8.3binaries
id3lib-3.8.3binaries
id3lib-3.8.3binaries
id3lib-3.8.3binaries
id3lib-3.8.3binaries
id3lib-3.8.3binaries
id3lib-3.8.3binaries
id3lib-3.8.3binaries
id3lib-3.8.3binaries
id3lib-3.8.3binaries
id3lib-3.8.3binaries
id3lib-3.8.3binaries
id3lib-3.8.3binaries
id3lib-3.8.3binaries
id3lib-3.8.3binaries
id3lib-3.8.3binaries
id3lib-3.8.3binaries
id3lib-3.8.3binaries
id3lib-3.8.3binaries
id3lib-3.8.3binaries
id3lib-3.8.3binaries
id3lib-3.8.3binaries
id3lib-3.8.3binaries
id3lib-3.8.3binaries
id3lib-3.8.3binaries
id3lib-3.8.3binaries
id3lib-3.8.3binaries
id3lib-3.8.3binaries
id3lib-3.8.3binaries
id3lib-3.8.3binaries
id3lib-3.8.3binaries
id3lib-3.8.3binaries
id3lib-3.8.3binaries
id3lib-3.8.3binaries
id3lib-3.8.3binaries
id3lib-3.8.3binaries
id3lib-3.8.3binaries
id3lib-3.8.3binaries
id3lib-3.8.3binaries
id3lib-3.8.3binaries
id3lib-3.8.3binaries
id3lib-3.8.3binaries
id3lib-3.8.3binaries
id3lib-3.8.3binaries
id3lib-3.8.3binaries
id3lib-3.8.3binaries
id3lib-3.8.3binaries
id3lib-3.8.3binaries
id3lib-3.8.3binaries
id3lib-3.8.3binaries
id3lib-3.8.3binaries
id3lib-3.8.3binaries
id3lib-3.8.3binaries
id3lib-3.8.3binaries
id3lib-3.8.3binaries
id3lib-3.8.3binaries
id3lib-3.8.3binaries
id3lib-3.8.3binaries
id3lib-3.8.3binaries
id3lib-3.8.3binaries
id3lib-3.8.3binaries
id3lib-3.8.3binaries
id3lib-3.8.3binaries
id3lib-3.8.3binaries
id3lib-3.8.3binaries
id3lib-3.8.3binaries
id3lib-3.8.3binaries
id3lib-3.8.3binaries
id3lib-3.8.3binaries
id3lib-3.8.3binaries
id3lib-3.8.3binaries
id3lib-3.8.3binaries
id3lib-3.8.3binaries
id3lib-3.8.3binaries
id3lib-3.8.3binaries
id3lib-3.8.3binaries
id3lib-3.8.3binaries
id3lib-3.8.3binaries
id3lib-3.8.3binaries
id3lib-3.8.3binaries
id3lib-3.8.3binaries
id3lib-3.8.3binaries
id3lib-3.8.3binaries
id3lib-3.8.3binaries
id3lib-3.8.3binaries
id3lib-3.8.3binaries
id3lib-3.8.3binaries
id3lib-3.8.3binaries
id3lib-3.8.3binaries
id3lib-3.8.3binaries
id3lib-3.8.3binaries
id3lib-3.8.3binaries
id3lib-3.8.3binaries
id3lib-3.8.3binaries
id3lib-3.8.3binaries
id3lib-3.8.3binaries
id3lib-3.8.3binaries
id3lib-3.8.3binaries
id3lib-3.8.3binaries
id3lib-3.8.3binaries
id3lib-3.8.3binaries
id3lib-3.8.3binaries
id3lib-3.8.3binaries
id3lib-3.8.3binaries
id3lib-3.8.3binaries
id3lib-3.8.3binaries
id3lib-3.8.3binaries
id3lib-3.8.3binaries
id3lib-3.8.3binaries
id3lib-3.8.3binaries
id3lib-3.8.3binaries
id3lib-3.8.3binaries
id3lib-3.8.3binaries
id3lib-3.8.3binaries
id3lib-3.8.3binaries
id3lib-3.8.3binaries
id3lib-3.8.3binaries
id3lib-3.8.3binaries
id3lib-3.8.3binaries
id3lib-3.8.3binaries
id3lib-3.8.3binaries
id3lib-3.8.3binaries
id3lib-3.8.3binaries
id3lib-3.8.3binaries
id3lib-3.8.3binaries
id3lib-3.8.3binaries
id3lib-3.8.3binaries
id3lib-3.8.3binaries
id3lib-3.8.3binaries
id3lib-3.8.3binaries
id3lib-3.8.3binaries
id3lib-3.8.3binaries
id3lib-3.8.3binaries
id3lib-3.8.3binaries
id3lib-3.8.3binaries
id3lib-3.8.3binaries
id3lib-3.8.3binaries
id3lib-3.8.3binaries
id3lib-3.8.3binaries
id3lib-3.8.3binaries
id3lib-3.8.3binaries
id3lib-3.8.3binaries
id3lib-3.8.3binaries
id3lib-3.8.3binaries
id3lib-3.8.3binaries
id3lib-3.8.3binaries
id3lib-3.8.3binaries
id3lib-3.8.3binaries
id3lib-3.8.3binaries
id3lib-3.8.3binaries
id3lib-3.8.3binaries
id3lib-3.8.3binaries
id3lib-3.8.3binaries
id3lib-3.8.3binaries
id3lib-3.8.3binaries
id3lib-3.8.3binaries
id3lib-3.8.3binaries
id3lib-3.8.3binaries
id3lib-3.8.3binaries
id3lib-3.8.3binaries
id3lib-3.8.3binaries
id3lib-3.8.3binaries
id3lib-3.8.3binaries
id3lib-3.8.3binaries
id3lib-3.8.3binaries
id3lib-3.8.3binaries
id3lib-3.8.3binaries
id3lib-3.8.3binaries
id3lib-3.8.3binaries
id3lib-3.8.3binaries
id3lib-3.8.3binaries
id3lib-3.8.3binaries
id3lib-3.8.3binaries
id3lib-3.8.3binaries
id3lib-3.8.3binaries
id3lib-3.8.3binaries
id3lib-3.8.3binaries
id3lib-3.8.3binaries
id3lib-3.8.3binaries
id3lib-3.8.3binaries
id3lib-3.8.3binaries
id3lib-3.8.3binaries
id3lib-3.8.3binaries
id3lib-3.8.3binaries
id3lib-3.8.3binaries
id3lib-3.8.3binaries
id3lib-3.8.3binaries
id3lib-3.8.3binaries
id3lib-3.8.3binaries
id3lib-3.8.3binaries
id3lib-3.8.3binaries
id3lib-3.8.3binaries
id3lib-3.8.3binaries
id3lib-3.8.3binaries
id3lib-3.8.3binaries
id3lib-3.8.3binaries
id3lib-3.8.3binaries
id3lib-3.8.3binaries
id3lib-3.8.3binaries
id3lib-3.8.3binaries
id3lib-3.8.3binaries
id3lib-3.8.3binaries
id3lib-3.8.3binaries
id3lib-3.8.3binaries
id3lib-3.8.3binaries
id3lib-3.8.3binaries
id3lib-3.8.3binaries
id3lib-3.8.3binaries
id3lib-3.8.3binaries
id3lib-3.8.3binaries
id3lib-3.8.3binaries
id3lib-3.8.3binaries
id3lib-3.8.3binaries
id3lib-3.8.3binaries
id3lib-3.8.3binaries
id3lib-3.8.3binaries
id3lib-3.8.3binaries
id3lib-3.8.3binaries
id3lib-3.8.3binaries
id3lib-3.8.3binaries
id3lib-3.8.3binaries
id3lib-3.8.3binaries
id3lib-3.8.3binaries
id3lib-3.8.3binaries
id3lib-3.8.3binaries
id3lib-3.8.3binaries
id3lib-3.8.3binaries
id3lib-3.8.3binaries
id3lib-3.8.3binaries
id3lib-3.8.3binaries
id3lib-3.8.3binaries
id3lib-3.8.3binaries
id3lib-3.8.3binaries
id3lib-3.8.3binaries
id3lib-3.8.3binaries
id3lib-3.8.3binaries
id3lib-3.8.3binaries
id3lib-3.8.3binaries
id3lib-3.8.3binaries
id3lib-3.8.3binaries
id3lib-3.8.3binaries
id3lib-3.8.3binaries
id3lib-3.8.3binaries
id3lib-3.8.3binaries
id3lib-3.8.3binaries
id3lib-3.8.3binaries
id3lib-3.8.3binaries
id3lib-3.8.3binaries
id3lib-3.8.3binaries
id3lib-3.8.3binaries
id3lib-3.8.3binaries
id3lib-3.8.3binaries
id3lib-3.8.3binaries
id3lib-3.8.3binaries
id3lib-3.8.3binaries
id3lib-3.8.3binaries
id3lib-3.8.3binaries
id3lib-3.8.3binaries
id3lib-3.8.3binaries
id3lib-3.8.3binaries
id3lib-3.8.3binaries
id3lib-3.8.3binaries
id3lib-3.8.3binaries
id3lib-3.8.3binaries
id3lib-3.8.3binaries
id3lib-3.8.3binaries
id3lib-3.8.3binaries
id3lib-3.8.3binaries
id3lib-3.8.3binaries
id3lib-3.8.3binaries
id3lib-3.8.3binaries
id3lib-3.8.3binaries
id3lib-3.8.3binaries
id3lib-3.8.3binaries
id3lib-3.8.3binaries
id3lib-3.8.3binaries
id3lib-3.8.3binaries
id3lib-3.8.3binaries
id3lib-3.8.3binaries
id3lib-3.8.3binaries
id3lib-3.8.3binaries
id3lib-3.8.3binaries
id3lib-3.8.3binaries
id3lib-3.8.3binaries
id3lib-3.8.3binaries
id3lib-3.8.3binaries
id3lib-3.8.3binaries
id3lib-3.8.3binaries
id3lib-3.8.3binaries
id3lib-3.8.3binaries
id3lib-3.8.3binaries
id3lib-3.8.3binaries
id3lib-3.8.3binaries
id3lib-3.8.3binaries
id3lib-3.8.3binaries
id3lib-3.8.3binaries
id3lib-3.8.3binaries
id3lib-3.8.3binaries
id3lib-3.8.3binaries
id3lib-3.8.3binaries
id3lib-3.8.3binaries
id3lib-3.8.3binaries
id3lib-3.8.3binaries
id3lib-3.8.3binaries
id3lib-3.8.3binaries
id3lib-3.8.3binaries
id3lib-3.8.3binaries
id3lib-3.8.3binaries
id3lib-3.8.3binaries
id3lib-3.8.3binaries
id3lib-3.8.3binaries
id3lib-3.8.3binaries
id3lib-3.8.3binaries
id3lib-3.8.3binaries
id3lib-3.8.3binaries
id3lib-3.8.3binaries
id3lib-3.8.3binaries
id3lib-3.8.3binaries
id3lib-3.8.3binaries
id3lib-3.8.3binaries
id3lib-3.8.3binaries
id3lib-3.8.3binaries
id3lib-3.8.3binaries
id3lib-3.8.3binaries
id3lib-3.8.3binaries
id3lib-3.8.3binaries
id3lib-3.8.3binaries
id3lib-3.8.3binaries
id3lib-3.8.3binaries
id3lib-3.8.3binaries
id3lib-3.8.3binaries
id3lib-3.8.3binaries
id3lib-3.8.3binaries
id3lib-3.8.3binaries
id3lib-3.8.3binaries
id3lib-3.8.3binaries
id3lib-3.8.3binaries
id3lib-3.8.3binaries
id3lib-3.8.3binaries
id3lib-3.8.3binaries
id3lib-3.8.3binaries
id3lib-3.8.3binaries
id3lib-3.8.3binaries
id3lib-3.8.3binaries
id3lib-3.8.3binaries

As you can probably tell, it gets hung up on the id3lib folder.  The contents of the above folders are as follows:
./ (the directory list.cpp is run from)

a.out
countch.cpp
countch.exe
curltest
curltest.cpp
dirRead.h
dirReadLin.h
fibonacci
fibonacci2.exe
fibonacci_console_only.exe
fibonacci.cpp
getenv
getenv.cpp
hello.cpp
hello.exe
id3lib
list
list.cpp
mp3tag.h
music_generator.cpp
output.txt
Projects
test.cpp
test.exe

id3lib

id3lib-3.8.3binaries

The actual code so far:
list.cpp

#include<stdio.h>
#include<cstdlib>
#include<iostream>
#include<string.h>
#include<fstream>
#include<dirent.h>
#include "dirReadLin.h"

using namespace std;

int main(int argc, char* argv[]){
    if (argc != 2) {
        //check to see if an argument was passed.
        printf( "usage: %s path",argv[0]);
    }
    else {
        //create the basic path to the directory using command-line argument
        string dir = argv[1];
        //create the list of strings
        vector<string> files = vector<string>();
        //call the recursive directory traversal method
        getdir_r(dir,dir,files);
        //list all files within the list.
        for(unsigned int i = 0;i<files.size();i++){
            cout << files[i] << endl;
        }
    }
    return 0;
}

dirReadLin.h

#include<cstdio>
#include<iostream>
#include<cstdlib>
#include<string.h>
#include<stddef.h>
#include<sys/types.h>
#include<dirent.h>
#include<vector>

using namespace std;

int getdir(string dir, vector<string> &files){
    DIR *dp; //create the directory object
    struct dirent *entry; //create the entry structure
    dp=opendir(dir.c_str()); //open directory by converting the string to const char*
    if(dp!=NULL){ //if the directory isn't empty
         while( entry=readdir(dp) ){ //while there is something in the directory
             if(strcmp(entry->d_name, ".") != 0 && strcmp(entry->d_name, "..") != 0){ //and if the entry isn't "." or ".."
                 files.push_back(string(entry->d_name));//add the entry to the list of files
             }
         }
         (void) closedir(dp); //close directory
    }
    else{
        perror ("Couldn't open the directory.");
    }
return 0;
}

int getdir_r(string odir, string dir, vector<string> &files){ //pass the original directory path (odir), for path creation later
    DIR *dp;
    string path;
    getdir(dir,files); //list the files in the root folder, in order to fill the list
    for(unsigned int i = 0; i<files.size();i++){
        char last=odir.at(odir.length()-1);
        if (last == '/' ){ //check to see if the original path ends in /, for proper path creation
            path = odir+files[i];
        }else{
            path = odir+"/"+files[i];
        }
        dp=opendir(path.c_str());//open path
        if (dp) { //make sure path is a directory, if yes, continue on.
            cout << path << endl;
            getdir_r(odir,path,files);//recurse
        }
    }
}

Last edited by lswest (2010-05-16 13:25:13)


Lswest <- the first letter of my username is a lowercase "L".
"...the Linux philosophy is "laugh in the face of danger". Oops. Wrong one. "Do it yourself". That's it." - Linus Torvalds

Offline

#2 2010-05-16 11:33:43

SwedBo
Member
From: Riga, Latvia
Registered: 2010-04-28
Posts: 28

Re: [SOLVED]Recursive directory traversal in C++

Have no time to go through all of the code you posted but here's a working example which I wrote earlier this month.

// Author:    Dainis Dauners ( SwedBo [ e-creative@inbox.lv ] @ archlinux.org )
// Date:      02.05.2010

#include <iostream>
#include <string>
#include <dirent.h>
#include <sys/stat.h>
#include <errno.h>

using namespace std;

bool isDir(string dir)
{
    struct stat fileInfo;
    stat(dir.c_str(), &fileInfo);
    if (S_ISDIR(fileInfo.st_mode)) {
        return true;
    } else {
        return false;
    }
}

void listFiles(string baseDir, bool recursive)
{
    DIR *dp;
    struct dirent *dirp;
    if ((dp = opendir(baseDir.c_str())) == NULL) {
        cout << "[ERROR: " << errno << " ] Couldn't open " << baseDir << "." << endl;
        return;
    } else {
        while ((dirp = readdir(dp)) != NULL) {
            if (dirp->d_name != string(".") && dirp->d_name != string("..")) {
                if (isDir(baseDir + dirp->d_name) == true && recursive == true) {
                    cout << "[DIR]\t" << baseDir << dirp->d_name << "/" << endl;
                    listFiles(baseDir + dirp->d_name + "/", true);
                } else {
                    cout << "[FILE]\t" << baseDir << dirp->d_name << endl;
                }
            }
        }
        closedir(dp);
    }
}

int main(int argc, char *argv[])
{
    if (argc <= 1) {
        cout << "[WARNING] At least one argument ( path ) expected .. exiting." << endl;
        return 1;
    } else {
        listFiles(argv[1], true);
    }
    
    return 0;
}

** Argument should contain the trailing slash ( eg. /etc/httpd/, NOT /etc/httpd ).

Last edited by SwedBo (2010-05-16 11:36:22)

Offline

#3 2010-05-16 11:36:14

lswest
Member
From: Munich, Germany
Registered: 2008-06-14
Posts: 456
Website

Re: [SOLVED]Recursive directory traversal in C++

Thanks for the working code sample, I'll be sure to go through it.  As for the trailing slash, I think my solution might work for that?

 char last=odir.at(odir.length()-1); //find last character of string
        if (last == '/' ){ //check to see if the original path ends in /, for proper path creation
            path = odir+files[i]; //don't add a forward slash
        }else{
            path = odir+"/"+files[i]; //add a forward slash
        }

Just in case you were interested.  Thanks again!

Also, re-reading your code...the bool recursive in your method header seems unnecessary, since you never actually check the value of it, and just recursively list the files, unless I'm reading it wrong.

Last edited by lswest (2010-05-16 11:41:48)


Lswest <- the first letter of my username is a lowercase "L".
"...the Linux philosophy is "laugh in the face of danger". Oops. Wrong one. "Do it yourself". That's it." - Linus Torvalds

Offline

#4 2010-05-16 11:41:12

SwedBo
Member
From: Riga, Latvia
Registered: 2010-04-28
Posts: 28

Re: [SOLVED]Recursive directory traversal in C++

lswest wrote:

Thanks for the working code sample, I'll be sure to go through it.  As for the trailing slash, I think my solution might work for that?

 char last=odir.at(odir.length()-1); //find last character of string
        if (last == '/' ){ //check to see if the original path ends in /, for proper path creation
            path = odir+files[i]; //don't add a forward slash
        }else{
            path = odir+"/"+files[i]; //add a forward slash
        }

Just in case you were interested.  Thanks again!

When you check whether the object is a directory or file, does it return the right values ?

** For testing purposes, add some cout statements here and there so that you could see what the program is doing ..

Offline

#5 2010-05-16 11:43:36

lswest
Member
From: Munich, Germany
Registered: 2008-06-14
Posts: 456
Website

Re: [SOLVED]Recursive directory traversal in C++

It does indeed return the correct value, but I'm going to probably end up using your method since it's a bit easier to troubleshoot.

About the cout's...very true, I was just thoroughly confusing myself when I posted here, thus I took a break.

*EDIT* Thanks for the code sample, I've made use of your "isDir" function and added in your check for whether it was a directory or not and it works.  I have a hunch the error was in the way I was attempting recursion and and mixing my two methods.  I've also removed the required "/" at the end of the path with this line of code:

if(dir.at(dir.length()-1)!='/'){
        dir=dir+"/";
    }

Basically, it just checks the last character of the string and if it's not a "/", it adds it to the end of the string.  Just in case you are interested.

Fixed code (for anyone interested):

#include<cstdio>
#include<iostream>
#include<cstdlib>
#include<string.h>
#include<stddef.h>
#include<sys/types.h>
#include<sys/stat.h>
#include<dirent.h>
#include<vector>

using namespace std;

bool isDir(string dir){
    struct stat fileInfo;
    stat(dir.c_str(), &fileInfo);
    if (S_ISDIR(fileInfo.st_mode)){
        return true;
    }else{
        return false;
    }
}

void getdir(string dir, vector<string> &files, bool recursive){
    DIR *dp; //create the directory object
    struct dirent *entry; //create the entry structure
    dp=opendir(dir.c_str()); //open directory by converting the string to const char*
    if(dir.at(dir.length()-1)!='/'){
        dir=dir+"/";
    }
    if(dp!=NULL){ //if the directory isn't empty
         while( entry=readdir(dp) ){ //while there is something in the directory
             if(strcmp(entry->d_name, ".") != 0 && strcmp(entry->d_name, "..") != 0){ //and if the entry isn't "." or ".."
                 if(isDir(dir + entry->d_name) == true && recursive == true){//check if the new path is a directory, and if it is (and recursion is specified as true), recurse.
                     files.push_back(string(entry->d_name)); //add entry to the list of files
                     getdir(dir + entry->d_name, files, true); //recurse
                 } else{
                      files.push_back(string(entry->d_name));//add the entry to the list of files
                 } 
             }
         }
         (void) closedir(dp); //close directory
    }
    else{
        perror ("Couldn't open the directory.");
    }
}

list.cpp

#include<stdio.h>
#include<cstdlib>
#include<iostream>
#include<string.h>
#include<fstream>
#include<dirent.h>
#include "dirReadLin.h"

using namespace std;

int main(int argc, char* argv[]){
    if (argc != 2) {
        //check to see if an argument was passed.
        printf( "usage: %s path",argv[0]);
    }
    else {
        //create the basic path to the directory using command-line argument
        string dir = argv[1];
        //create the list of strings
        vector<string> files = vector<string>();
        //call the recursive directory traversal method
        getdir(dir,files,true);
        //list all files within the list.
        for(unsigned int i = 0;i<files.size();i++){
            cout << files[i] << endl;
        }
    }
    return 0;
}

Last edited by lswest (2010-05-16 12:01:21)


Lswest <- the first letter of my username is a lowercase "L".
"...the Linux philosophy is "laugh in the face of danger". Oops. Wrong one. "Do it yourself". That's it." - Linus Torvalds

Offline

#6 2010-05-16 12:05:18

SwedBo
Member
From: Riga, Latvia
Registered: 2010-04-28
Posts: 28

Re: [SOLVED]Recursive directory traversal in C++

Glad it helped and thanks for the snippet for checking / adding the trailing slash smile

Offline

#7 2010-05-16 12:07:22

lswest
Member
From: Munich, Germany
Registered: 2008-06-14
Posts: 456
Website

Re: [SOLVED]Recursive directory traversal in C++

SwedBo wrote:

Glad it helped and thanks for the snippet for checking / adding the trailing slash smile

Haha, least I could do smile  Thanks again!


Lswest <- the first letter of my username is a lowercase "L".
"...the Linux philosophy is "laugh in the face of danger". Oops. Wrong one. "Do it yourself". That's it." - Linus Torvalds

Offline

#8 2010-05-16 12:07:25

Kiwi
Member
Registered: 2008-02-24
Posts: 153

Re: [SOLVED]Recursive directory traversal in C++

I have talked to a lot of very knowledgeable people about recursive directory traversal and they all say not to do it. Instead of using recursion do it iteratively.

Actually, do as much as you can easily (or even often not easily) iteratively instead. In programming classes they usually teach recursion as being how to do things, they do not usually tell you that you should not do it. >.> There are a few exceptions...but in general it should, and can, be avoided. (all recursive algorithms can be turned into iterative ones, and vice-versa)

Offline

#9 2010-05-16 12:11:10

lswest
Member
From: Munich, Germany
Registered: 2008-06-14
Posts: 456
Website

Re: [SOLVED]Recursive directory traversal in C++

Kiwi wrote:

I have talked to a lot of very knowledgeable people about recursive directory traversal and they all say not to do it. Instead of using recursion do it iteratively.

Actually, do as much as you can easily (or even often not easily) iteratively instead. In programming classes they usually teach recursion as being how to do things, they do not usually tell you that you should not do it. >.> There are a few exceptions...but in general it should, and can, be avoided. (all recursive algorithms can be turned into iterative ones, and vice-versa)

Probably true, and I may re-write it as an iterative method, depending on how it works for my actual code.  Basically, I want to iterate through my music collection and compile a list of songs, or artists, or albums, etc.  Besides, re-writing it gives me more practice wink  Thanks for the comment though, and I'll definitely take it under advisement as I continue to learn C++.  If I remember correctly though my Comp. Sci. class only ever covered recursive methods in Java.  And now that you mention it, I'm not actually sure what I use in my Python scripts...  Thanks for pointing that out, got something new to learn now! (And something more to help fend off the boredom).


Lswest <- the first letter of my username is a lowercase "L".
"...the Linux philosophy is "laugh in the face of danger". Oops. Wrong one. "Do it yourself". That's it." - Linus Torvalds

Offline

#10 2010-05-16 14:08:11

PJ
Member
From: Sweden
Registered: 2005-10-11
Posts: 602

Re: [SOLVED]Recursive directory traversal in C++

Kiwi wrote:

Actually, do as much as you can easily (or even often not easily) iteratively instead. In programming classes they usually teach recursion as being how to do things, they do not usually tell you that you should not do it.

My guess why recursion is used for programming classes is because it forces students to implement code which executes in a deterministic way, iterative algorithms tends to be easier to implement in a non deterministic way. It is of course possible to write non deterministic recursive algorithms but is a lot harder compared to an iterative algorithm. Anyway, recursive algorithms tends to scale badly if the data set is large and that is pretty much why those are avoided.

Offline

Board footer

Powered by FluxBB