diff --git a/src/yuzu/game_list_worker.cpp b/src/yuzu/game_list_worker.cpp
index 1ccabed59cdecdfad8cf63bfb94245b1be5d3766..4f30e9147a01c9b62b93b7998b7ec874b0263fb6 100644
--- a/src/yuzu/game_list_worker.cpp
+++ b/src/yuzu/game_list_worker.cpp
@@ -8,6 +8,7 @@
 #include <vector>
 
 #include <QDir>
+#include <QFile>
 #include <QFileInfo>
 #include <QSettings>
 
@@ -46,20 +47,17 @@ QString GetGameListCachedObject(const std::string& filename, const std::string&
     if (!FileUtil::Exists(path)) {
         const auto str = generator();
 
-        std::ofstream stream(path);
-        if (stream) {
-            stream << str.toStdString();
+        QFile file{QString::fromStdString(path)};
+        if (file.open(QFile::WriteOnly)) {
+            file.write(str.toUtf8());
         }
 
         return str;
     }
 
-    std::ifstream stream(path);
-
-    if (stream) {
-        const std::string out(std::istreambuf_iterator<char>{stream},
-                              std::istreambuf_iterator<char>{});
-        return QString::fromStdString(out);
+    QFile file{QString::fromStdString(path)};
+    if (file.open(QFile::ReadOnly)) {
+        return QString::fromUtf8(file.readAll());
     }
 
     return generator();
@@ -82,53 +80,51 @@ std::pair<std::vector<u8>, std::string> GetGameListCachedObject(
     if (!FileUtil::Exists(path1) || !FileUtil::Exists(path2)) {
         const auto [icon, nacp] = generator();
 
-        FileUtil::IOFile file1(path1, "wb");
-        if (!file1.IsOpen()) {
+        QFile file1{QString::fromStdString(path1)};
+        if (!file1.open(QFile::WriteOnly)) {
             LOG_ERROR(Frontend, "Failed to open cache file.");
             return generator();
         }
 
-        if (!file1.Resize(icon.size())) {
+        if (!file1.resize(icon.size())) {
             LOG_ERROR(Frontend, "Failed to resize cache file to necessary size.");
             return generator();
         }
 
-        if (file1.WriteBytes(icon.data(), icon.size()) != icon.size()) {
+        if (file1.write(reinterpret_cast<const char*>(icon.data()), icon.size()) != icon.size()) {
             LOG_ERROR(Frontend, "Failed to write data to cache file.");
             return generator();
         }
 
-        std::ofstream stream2(path2, std::ios::out);
-        if (stream2) {
-            stream2 << nacp;
+        QFile file2{QString::fromStdString(path2)};
+        if (file2.open(QFile::WriteOnly)) {
+            file2.write(nacp.data(), nacp.size());
         }
 
         return std::make_pair(icon, nacp);
     }
 
-    FileUtil::IOFile file1(path1, "rb");
-    std::ifstream stream2(path2);
+    QFile file1(QString::fromStdString(path1));
+    QFile file2(QString::fromStdString(path2));
 
-    if (!file1.IsOpen()) {
+    if (!file1.open(QFile::ReadOnly)) {
         LOG_ERROR(Frontend, "Failed to open cache file for reading.");
         return generator();
     }
 
-    if (!stream2) {
+    if (!file2.open(QFile::ReadOnly)) {
         LOG_ERROR(Frontend, "Failed to open cache file for reading.");
         return generator();
     }
 
-    std::vector<u8> vec(file1.GetSize());
-    file1.ReadBytes(vec.data(), vec.size());
-
-    if (stream2 && !vec.empty()) {
-        const std::string out(std::istreambuf_iterator<char>{stream2},
-                              std::istreambuf_iterator<char>{});
-        return std::make_pair(vec, out);
+    std::vector<u8> vec(file1.size());
+    if (file1.read(reinterpret_cast<char*>(vec.data()), vec.size()) !=
+        static_cast<s64>(vec.size())) {
+        return generator();
     }
 
-    return generator();
+    const auto data = file2.readAll();
+    return std::make_pair(vec, data.toStdString());
 }
 
 void GetMetadataFromControlNCA(const FileSys::PatchManager& patch_manager, const FileSys::NCA& nca,