diff --git a/oscar/logger.cpp b/oscar/logger.cpp
index 0d06d0ba..6594f3e6 100644
--- a/oscar/logger.cpp
+++ b/oscar/logger.cpp
@@ -87,11 +87,11 @@ void LogThread::connectionReady()
     qDebug() << "Logging UI initialized";
 }
 
-void LogThread::logToFile()
+bool LogThread::logToFile()
 {
     if (m_logStream) {
         qWarning().noquote() << "Already logging to" << m_logFile->fileName();
-        return;
+        return true;
     }
 
     QString debugLog = GetLogDir() + "/debug.txt";
@@ -109,8 +109,10 @@ void LogThread::logToFile()
     if (m_logStream) {
         qDebug().noquote() << "Logging to" << debugLog;
     } else {
-        qWarning().noquote() << "Unable to open" << debugLog;
+        qWarning().noquote() << "Could not open" << debugLog << "error code" << m_logFile->error() << m_logFile->errorString();
+        return false;
     }
+    return true;
 }
 
 LogThread::~LogThread()
diff --git a/oscar/logger.h b/oscar/logger.h
index 2f4a1803..267fe3f8 100644
--- a/oscar/logger.h
+++ b/oscar/logger.h
@@ -29,7 +29,7 @@ public:
     void appendClean(QString msg);
     bool isRunning() { return running; }
     void connectionReady();
-    void logToFile();
+    bool logToFile();
     QString logFileName();
 
     void quit();
diff --git a/oscar/main.cpp b/oscar/main.cpp
index 58fb0e75..5c0941fd 100644
--- a/oscar/main.cpp
+++ b/oscar/main.cpp
@@ -379,7 +379,7 @@ int main(int argc, char *argv[]) {
     initializeLogger();
     // After initializing the logger, any qDebug() messages will be queued but not written to console
     // until MainWindow is constructed below. In spite of that, we initialize the logger here so that
-    // the intervening messages to show up in the debug pane.
+    // the intervening messages show up in the debug pane.
     //
     // The only time this is really noticeable is when initTranslations() presents its language
     // selection QDialog, which waits indefinitely for user input before MainWindow is constructed.
@@ -555,8 +555,27 @@ int main(int argc, char *argv[]) {
         return 0;
     }
 
+    // Make sure we can write to the data directory
+    QFile testFile(GetAppData()+"/testfile.txt");
+    if (testFile.exists())
+        testFile.remove();
+    if (!testFile.open(QFile::ReadWrite)) {
+        QString errMsg = QObject::tr("Unable to write to OSCAR data directory") + "\n" +
+                         GetAppData() + "\n" +
+                         QObject::tr("Error code") + ": " + QString::number(testFile.error()) + " - " + testFile.errorString() + "\n\n" +
+                         QObject::tr("OSCAR cannot continue and is exiting.") + "\n";
+        qCritical() << errMsg;
+        QMessageBox::critical(nullptr, QObject::tr("Exiting"), errMsg);
+        return 0;
+    }
+    else
+        testFile.remove();
+
     // Begin logging to file now that there's a data folder.
-    logger->logToFile();
+    if (!logger->logToFile()) {
+        QMessageBox::warning(nullptr, STR_MessageBox_Warning,
+                             QObject::tr("Unable to write to debug log. You can still use the debug pane (Help/Troubleshooting/Show Debug Pane) but the debug log will not be written to disk."));
+    }
 
     ///////////////////////////////////////////////////////////////////////////////////////////
     // Initialize preferences system (Don't use p_pref before this point!)