NickeManarin/ScreenToGif · warning · InvalidDataException
File is empty
Error message
File is empty
What it means
Thrown by LocalizationHelper.ImportStringResource after copying a user-selected XAML localization file to temp and opening it with FileStream. If the copied file has zero bytes (fs.Length == 0), an InvalidDataException is thrown before attempting to parse it as XAML.
Source
Thrown at ScreenToGif.Util/LocalizationHelper.cs:367
public static void ImportStringResource(string path)
{
try
{
if (string.IsNullOrEmpty(path))
throw new ArgumentException("Path is null");
var destination = Path.Combine(Path.GetTempPath(), Path.GetFileName(path));
if (File.Exists(destination))
File.Delete(destination);
File.WriteAllText(destination, File.ReadAllText(path).Replace("
", "\r"));
using var fs = new FileStream(destination, FileMode.Open, FileAccess.Read, FileShare.Read);
if (fs.Length == 0)
throw new InvalidDataException("File is empty");
//Reads the ResourceDictionary file
var dictionary = (ResourceDictionary)XamlReader.Load(fs);
dictionary.Source = new Uri(destination);
//Add in newly loaded Resource Dictionary.
Application.Current.Resources.MergedDictionaries.Add(dictionary);
}
catch (Exception ex)
{
LogWriter.Log(ex, "Import Resource");
//Rethrowing, because it's more useful to catch later
throw;
}
}
public static List<ResourceDictionary> GetLocalizations()
{View on GitHub (pinned to a4d0a67c21)
Solutions
- Check the source file size before calling ImportStringResource and warn the user if it is empty.
- Verify the file is a valid XAML ResourceDictionary by attempting a quick parse before importing.
- Re-download or re-export the localization file from a known-good source.
- Catch InvalidDataException at the call site and show a user-friendly message.
Example fix
// before
if (fs.Length == 0)
throw new InvalidDataException("File is empty");
// after: validate at entry, include file path in message
var fileInfo = new FileInfo(path);
if (fileInfo.Length == 0)
throw new InvalidDataException($"File '{path}' is empty."); Defensive patterns
Strategy: validation
Validate before calling
var fileInfo = new FileInfo(path);
if (!fileInfo.Exists || fileInfo.Length == 0)
{
// Don't attempt import; warn the user
return;
} Type guard
static bool IsValidLocalizationFile(string path)
{
return File.Exists(path) && new FileInfo(path).Length > 0;
} Try / catch
try
{
LocalizationHelper.ImportStringResource(path);
}
catch (InvalidDataException ex)
{
Dialog.Ok("Localization", "Import failed", $"The file '{path}' is empty or invalid.");
} Prevention
- Validate file existence and size before importing.
- After exporting a localization file, verify it was written correctly before allowing import.
- Check for disk space issues that could cause zero-byte writes.
When it happens
Trigger: The source file at 'path' exists but contains zero bytes. This happens when the file was created but never written to, or was truncated/corrupted during a previous save. File.ReadAllText succeeds on an empty file and File.WriteAllText produces an empty destination.
Common situations: User selected an empty or partially downloaded localization XAML file. A previous export operation failed mid-write, leaving a zero-byte file. File system issue (disk full, permissions) caused a zero-byte write. The source path points to a placeholder file.
Related errors
- Index out of range while trying to save the resource diction
- File not found
- Can't get language codes. Path to language codes is null
- Empty response from server when getting language codes
- Empty response from server when getting language codes path
AI-assisted analysis of NickeManarin/ScreenToGif@a4d0a67c21 (2026-08-13).
Data as JSON: /api/errors/c45445f7c52f8730.
Report an issue: GitHub.