Classes | Files

PathName : Object

file and directory path utilities
Source: PathName.sc

Description

PathName is a utility class for manipulating file names and paths. It expects a path to a file, and lets you access parts of that file path.

Class Methods

PathName.new(path: "")

Arguments:

path

a String which likely contains one or more / as typical for folder separation. ~ will be converted to your fully addressed home directory, as per String: -standardizePath.

PathName.new("MyDisk/SC 2.2.8 f/Sounds/FunkyChicken");

PathName.tmp

PathName.tmp = value

Get or set the global temp directory as a String. This is used by Buffer, etc. By default this is "/tmp/" for Linux and macOS, and "/WINDOWS/TEMP/" for Windows.

Inherited class methods

Undocumented class methods

PathName.fromOS9(path)

From extension in /usr/local/share/SuperCollider/SCClassLibrary/deprecated/3.9/deprecated-3.9.sc

PathName.scroot

PathName.scroot = value

Instance Methods

.fileName

returns just the name of the file itself; i.e. everything after the last slash in the full path.

(
var myPath;
myPath = PathName.new("MyDisk/SC 2.2.8 f/Sounds/FunkyChicken");
myPath.fileName.postln;
)

.fileNameWithoutExtension

returns the name of the file itself without the file extension.

.extension

returns the file extension, i.e. everything after the last full-stop in the -fileName.

.pathOnly

returns the full path up to the file name itself; i.e. everything up to and including the last slash. This is handy e.g. for storing several files in the same folder.

(
var myPath;
myPath = PathName.new("MyDisk/SC 2.2.8 f/Sounds/FunkyChicken");
myPath.pathOnly.postln;
)

.isAbsolutePath

.asAbsolutePath

.isRelativePath

.asRelativePath(relativeTo)

you MUST have correctly initialized the scroot classvar for this to know what it is relative to !

.folderName

returns only the name of the folder that the file is in; i.e. everything in between the last but one and the last slash.

(
var myPath;
myPath = PathName.new("MyDisk/SC 2.2.8 f/Sounds/FunkyChicken");
myPath.folderName.postln;
)

.fullPath

returns the full path name that PathName contains.

(
var myPath;
myPath = PathName.new("MyDisk/SC 2.2.8 f/Sounds/FunkyChicken");
myPath.fullPath.postln;
)

.entries

returns a list of all the files+folders inside the folder represented by this path.

(
var myPath;
myPath = PathName.new("./");
myPath.entries.postln;
)

.files

returns a list of all the files in the folder represented by this path.

(
var myPath;
myPath = PathName.new("./");
myPath.files.postln;
)

.folders

returns a list of all the subfolders of the folder represented by this path.

(
var myPath;
myPath = PathName.new("./");
myPath.folders.postln;
)

.isFile

returns a Boolean indicating whether or not the path represents a file (not a folder).

(
var myPath;
myPath = PathName.new("./");
myPath.isFile.postln;
)

.isFolder

returns a Boolean indicating whether or not the path represents a folder (not a file).

(
var myPath;
myPath = PathName.new("./");
myPath.isFolder.postln;
)

.filesDo(func)

Iterates over all files found in the pathname, including ones in subfolders.

(
var myPath;
myPath = PathName.new("./");
myPath.filesDo{|afile| afile.postln};
)

.allFolders

returns a list of all the folder names contained in the pathname itself.

(
var myPath;
myPath = PathName.new("MyDisk/SC 2.2.8 f/Sounds/FunkyChicken");
myPath.allFolders.postln;
)

.diskName

if path is an absolute path, returns the disk name; else a blank string.

(
var myPath;
myPath = PathName.new("MyDisk/SC 2.2.8 f/Sounds/FunkyChicken");
myPath.diskName.postln;
)

( // note the / at the start
var myPath;
myPath = PathName.new("/MyDisk/SC 2.2.8 f/Sounds/FunkyChicken");
myPath.diskName.postln;
)

+/+(path)

Path concatenation operator - useful for avoiding doubling-up slashes unnecessarily.

(PathName("/somewhere") +/+ PathName("over/the/rainbow")).postln;
(PathName("/somewhere") +/+ PathName("/over/the/rainbow")).postln;

.endNumber

returns a number at the end of PathName. Returns zero if there is no number.

PathName("floating1").endNumber.postln;
PathName("floating").endNumber.postln;

.noEndNumbers

returns -fullPath without any numbers at the end.

PathName("floating1").noEndNumbers.postln;
PathName("floating").noEndNumbers.postln;

.nextName

generates a sensible next name for a file by incrementing a number at the end of PathName, or by adding one if there is none. This is useful for recording files with consecutive names, and e.g. to generate a new filename when you don't want to overwrite an existing file with the current name.

PathName("floating34").nextName.postln;
PathName("floating").nextName.postln;
PathName("floating12_3A4X_56.7").nextName.postln;

Inherited instance methods

Undocumented instance methods

.absolutePath

.colonIndices

.deepFiles

.dumpToDoc(title: "Untitled")

.dumpTree

.endNumberIndex

.fileNameWithoutDoubleExtension

.filesDoNoCVS(func)

From extension in /usr/local/share/SuperCollider/SCClassLibrary/deprecated/3.9/deprecated-3.9.sc

.filesDoNoSVN(func)

From extension in /usr/local/share/SuperCollider/SCClassLibrary/deprecated/3.9/deprecated-3.9.sc

.foldersWithoutCVS(path)

From extension in /usr/local/share/SuperCollider/SCClassLibrary/deprecated/3.9/deprecated-3.9.sc

.foldersWithoutSVN(path)

From extension in /usr/local/share/SuperCollider/SCClassLibrary/deprecated/3.9/deprecated-3.9.sc

.helpFilesDo(func)

From extension in /usr/local/share/SuperCollider/SCClassLibrary/deprecated/3.9/deprecated-3.9.sc

.isCVS

From extension in /usr/local/share/SuperCollider/SCClassLibrary/deprecated/3.9/deprecated-3.9.sc

.isSVN

From extension in /usr/local/share/SuperCollider/SCClassLibrary/deprecated/3.9/deprecated-3.9.sc

.lastColonIndex

.parentPath

.pathMatch

.streamTree(str, tabs: 0)

.streamTreeNoCVS(str, tabs: 0)

From extension in /usr/local/share/SuperCollider/SCClassLibrary/deprecated/3.9/deprecated-3.9.sc

Examples

Here is an example that uses many instance methods. Just pick any file to see all the parts of its path.

(
GetFileDialog.new(
    { arg ok, path;
    var myPathName;
    if (ok,
        {
            myPathName = PathName.new(path);

            "New PathName object:  ".postc;
            myPathName.postln;

            "fileName only:        ".postc;
            myPathName.fileName.postln;

            "path up to file only: ".postc;
            myPathName.pathOnly.postln;

            "folder Name:          ".postc;
            myPathName.folderName.postln;
        }
    )
    }
)
)

Choose a soundfile to put into the library, using its foldername and filename.

(
GetFileDialog.new(
    { arg ok, path;
    var myPathName, myFile;
    if (ok,
        {
            myPathName = PathName.new(path);

            // read your file from disk, e.g. a soundFile/

            myFile = SoundFile.new;
            if (myFile.openRead(path),
                {
                    Library.put(
                        [ myPathName.folderName.asSymbol, myPathName.fileName.asSymbol ],
                        myFile);
                    ("Check Library.global" + myPathName.folderName + "please.").postln;
                },
                { ("Could not read soundfile" + path ++ ".").postln; }
            );
            myFile.close;
        }
    )
    }
)
)

Save three tables in the same folder. Note: The file name chosen in the dialog is ignored! The files are always named table1, table2, table3.

(
var table1, table2, table3;

table1 = Wavetable.sineFill(1024, [1,2,3]);
table2 = Signal.newClear.asWavetable;
table3 = Wavetable.sineFill(1024, Array.rand(64, 0.0, 1.0));

GetFileDialog.new(
    { arg ok, path;
    var myPathName, myPathOnly;
    if (ok,
        {
            myPathName = PathName.new(path);
            myPathOnly = myPathName.pathOnly;
            ("writing files tables1-3 to"+myPathOnly).postln;
            table1.write(myPathOnly ++ "table1");
            table2.write(myPathOnly ++ "table2");
            table3.write(myPathOnly ++ "table3");
        }
    )
    }
)
)