BIM Coordinator Program (INT) April 22, 2024

Find the next step in your career as a Graphisoft Certified BIM Coordinator!

Archicad C++ API
About Archicad add-on development using the C++ API.

IO::File::ReadBin and CopyBin returns FileNotFound error

ReignBough
Enthusiast
I created a function that supposed to read a binary file.

I was able to open (IO::File::Open) the file without error but when I read (IO::File::ReadBin) the file, it returns 0x81000100 (FileNotFound) and the "destination" is empty. When I copy (IO::File::CopyBin) it, it also returns the same error but the content was copied. EDIT: Copied to "destination".

Why it return this error?
~ReignBough~
ARCHICAD 26 INT (from AC18)
Windows 11 Pro, AMD Ryzen 7, 3.20GHz, 32.0GB RAM, 64-bit OS
2 REPLIES 2
Ralph Wessel
Mentor
I've used this function in my code without problems. Could you post some code to show what you're doing?
Ralph Wessel BArch
ReignBough
Enthusiast
//err = IO::fileSystem.GetSpecialLocation(IO::FileSystem::ApplicationFolder, &apxPath); // not APX location
LPSTR apxPath = new TCHAR[_MAX_PATH];
GetModuleFileName((HINSTANCE)&__ImageBase, apxPath, _MAX_PATH);
char* pos = str_lastchr(apxPath, '\\');
pos[1] = 0; // get only the location

IO::Location binPath;
binPath.Set(apxPath);
IO::Name fname = IO::Name(/*input: filename without extension*/);
fname.Append(".bin"); // file extension
err = binPath.AppendToLocal(fname);
//binPath.PrintDebug();

// open file
IO::File srcFile(binPath);
err = srcFile.Open(IO::File::ReadMode); <== no error here

// get size
USize szStr = 0;
err = srcFile.GetDataLength(&szStr); <== no error here, returns correct file size
++szStr;

// read file
char* srcStr = new char[szStr]();
//err = srcFile.ReadBin(srcStr, szStr); <== returns 0x81000100 (FileNotFound), srcStr is empty
err = srcFile.CopyBin(srcStr, szStr); <== returns 0x81000100 (FileNotFound), srcStr contains what I needed
~ReignBough~
ARCHICAD 26 INT (from AC18)
Windows 11 Pro, AMD Ryzen 7, 3.20GHz, 32.0GB RAM, 64-bit OS
Learn and get certified!