- Main Page
- Related Pages
- Modules
- Classes
- Examples

# readAndWrite.cpp

    //-
    // ==========================================================================
    // Copyright 1995,2006,2008 Autodesk, Inc. All rights reserved.
    //
    // Use of this software is subject to the terms of the Autodesk
    // license agreement provided at the time of installation or download,
    // or which otherwise accompanies this software in either electronic
    // or hard copy form.
    // ==========================================================================
    //+

    #include <maya/MStatus.h>
    #include <maya/MString.h>
    #include <maya/MFileIO.h>
    #include <maya/MLibrary.h>
    #include <maya/MIOStream.h>
    #include <string.h>

    const char* usage = "usage: [-h/help] readAndWrite fileName1 fileName2 ...\n\
           each file will be loaded, the string \".updated\" will be added\n\
           either at the end of just before the extension, and the file will\n\
           be written back out again.  If the specified file was created by\n\
           an old version of Maya, the \"updated\" version will contain the\n\
           same scene but updated to the current file format.\n";

    int main(int argc, char **argv)
    {
        MStatus stat;

        argc--, argv++;

        if (argc == 0) {
            cerr << usage;
            return(1);
        }

        for (; argc && argv[0][0] == '-'; argc--, argv++) {
            if (!strcmp(argv[0], "-h") || !strcmp(argv[0], "-help")) {
                cerr << usage;
                return(1);
            }
            // Check for other valid flags

            if (argv[0][0] == '-') {
                // Unknown flag
                cerr << usage;
                return(1);
            }
        }

        stat = MLibrary::initialize (argv[0]);
        if (!stat) {
            stat.perror("MLibrary::initialize");
            return 1;
        }

        for (; argc; argc--, argv++) {
            MString fileName(argv[0]);
            MString fileType;

            MFileIO::newFile(true);

            cerr << "Loading \"" << fileName << "\" ... ";
            // Load the file into Maya
            stat = MFileIO::open(fileName);
            if ( !stat ) {
                stat.perror(fileName.asChar());
                continue;
            }
            cerr << " done.\n";

            // Get the file type
            fileType = MFileIO::fileType();

            // Don't overwrite the existing file
            MString newFile;

            // Find the extension if one exists
            int loc = fileName.rindex('.');
            if (loc == -1) {
                newFile = fileName + ".updated";
            } else {
                newFile = fileName.substring(0, loc-1);
                newFile += ".updated";
                newFile += fileName.substring(loc, fileName.length()-1);
            }

            stat = MFileIO::saveAs(newFile, fileType.asChar());
            cerr << "    ";
            if (stat) {
                cerr << "resaved as "
                     << MFileIO::currentFile()
                     << endl;
            } else {
                stat.perror(newFile.asChar());
            }
        }

        MLibrary::cleanup();
        return 0;
    }