First of all: I'm not a programmer, just an amateur with some lights about Squeak/Pharo. So Please be gentle with the technical explanations...
I have a personal library with thousands of books, articles, etc., some on paper, some on digital support. All of this is garbage unless I can organize and classify everything.
I thought this would be an easy task with Smalltalk.
I created 3 main classes:
Object>>Cards
inst. var: name, localAdress, notes, tags, ...
Cards>>Work
inst. var: authors "aSet of Cards"
Cards>>Author
Object>>MyLibrary
inst var: works "aSet of Cards" authors "aSet of Cards" myLibraryBase "aString? aPath?"
Plain simple. Instances of MyLibrary #initialize with a UIManager chooseDirectory, to establish definitely where the files must be found.
Now here is my problem: I should create a method for MyLibrary to «scan» all the relevant files (suffix) in all the folders and subfolders under myLibraryBase. Meaning, the method should answer a collection of files. This method or another method should further create a new Card for each document found in the collection, registering its localAdress.
I simply cannot figure out how to do it. I tried, under FileSystem, #allDirectories, but it doesn't work. Also, I can't figure out how to force the FileSystem to start at myLibraryBase, instead of root, workingDirectory, etc.
Can someone point me in the right direction? Thanks
In Pharo, you could try this for a start. I used jpg
extension in the sample. If you use children
you get the current folder. If you use allChildren
, subfolders are included:
| folder imageFiles |
folder := '/path/to/your/folder' asFileReference.
imageFiles := folder allChildren select: [ :each | each basename endsWith: 'jpg' ].
This documentation is a bit dated, but I think it mostly still applies: https://eng.libretexts.org/Bookshelves/Computer_Science/Programming_Languages/Book%3A_Deep_into_Pharo_(Bergel_Cassou_Ducasse_and_Laval)/02%3A_Files_with_FileSystem