Skip to content

[Helper] FileSystem: refactor using std::filesystem#6096

Open
fredroy wants to merge 4 commits into
sofa-framework:masterfrom
fredroy:rewrite_filesystem
Open

[Helper] FileSystem: refactor using std::filesystem#6096
fredroy wants to merge 4 commits into
sofa-framework:masterfrom
fredroy:rewrite_filesystem

Conversation

@fredroy
Copy link
Copy Markdown
Contributor

@fredroy fredroy commented Apr 24, 2026

Based on

Title says all.
computeParentDirectory and stripDirectory have quite different behaviors than their STL counterparts (See the comments) so it still using the previous string-based implementation.
Note: different LLM (Qwen) than for the tests (Claude) 🤖 for fairness

[with-all-tests]


By submitting this pull request, I acknowledge that
I have read, understand, and agree SOFA Developer Certificate of Origin (DCO).


Reviewers will merge this pull-request only if

  • it builds with SUCCESS for all platforms on the CI.
  • it does not generate new warnings.
  • it does not generate new unit test failures.
  • it does not generate new scene test failures.
  • it does not break API compatibility.
  • it is more than 1 week old (or has fast-merge label).

@fredroy fredroy added pr: status to review To notify reviewers to review this pull-request pr: clean Cleaning the code pr: based on previous PR PR based on a previous PR, therefore to be merged ONLY subsequently pr: AI-aided Label notifying the reviewers that part or all of the PR has been generated with the help of an AI labels Apr 24, 2026
fredroy added 2 commits April 27, 2026 07:38
The Win32 listDirectory was returning false (no error) when FindFirstFile failed with INVALID_HANDLE_VALUE. This is inconsistent with the Unix codepath (which returns true on opendir failure) and with the documented convention
  (@return true on error). As a result, findFiles never saw the error and returned 0 instead of -1 on Windows.
@fredroy fredroy force-pushed the rewrite_filesystem branch from c9f46f1 to 70cf4ff Compare April 26, 2026 22:42
@epernod
Copy link
Copy Markdown
Contributor

epernod commented Apr 29, 2026

aha I didn't saw this one. I was testing my Qwen setup exactly on the same class...

@bakpaul
Copy link
Copy Markdown
Contributor

bakpaul commented Apr 30, 2026

[ci-build][with-all-tests]

@fredroy fredroy removed the pr: based on previous PR PR based on a previous PR, therefore to be merged ONLY subsequently label May 19, 2026
Comment on lines 160 to 176
bool FileSystem::removeDirectory(const std::string& path)
{
#ifdef WIN32
if (RemoveDirectory(sofa::helper::widenString(path).c_str()) == 0)
{
msg_error("FileSystem::removedirectory()") << path << ": " << Utils::GetLastError();
msg_error("FileSystem::removeDirectory()") << path << ": " << Utils::GetLastError();
return true;
}
#else
if (rmdir(path.c_str()))
{
msg_error("FileSystem::removedirectory()") << path << ": " << strerror(errno);
msg_error("FileSystem::removeDirectory()") << path << ": " << strerror(errno);
return true;
}
#endif
return false;
}
Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Should use std::filesystem::remove_all instead

return false;
}

bool FileSystem::removeAll(const std::string& path){
Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Ok I don't get why adding this instead of modifying the previous one which is meaningless now.

}

bool FileSystem::exists(const std::string& path, [[maybe_unused]] bool quiet)
bool FileSystem::removeFile(const std::string& path)
Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Ok so basically it is wrapping all call to std with try catch, do we want that ?

if ((INT_PTR)ShellExecuteA(nullptr, "open", filename.c_str(), nullptr, nullptr, SW_SHOWNORMAL) > 32)
success = true;
#elif defined(__APPLE__)
pid_t pid; // points to a buffer that is used to return the process ID of the new child process.
Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Why ?

if (!filename.empty())
{
if (!FileSystem::exists(filename))
if (!fs::exists(filename))
Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Why not use the previously created FileSystem::exists ?

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

pr: AI-aided Label notifying the reviewers that part or all of the PR has been generated with the help of an AI pr: clean Cleaning the code pr: status to review To notify reviewers to review this pull-request

Projects

None yet

Development

Successfully merging this pull request may close these issues.

3 participants