using System; using System.IO; using RainmeterEditor.Model; namespace RainmeterEditor.Documents.Text { /// /// Storage for text files /// public class TextStorage : IDocumentStorage { /// IDocument IDocumentStorage.Read(string path) { TextDocument document = new TextDocument(); document.FilePath = path; document.Text = File.ReadAllText(path); return document; } /// public void Write(string path, IDocument document) { TextDocument textDocument = document as TextDocument; if (textDocument == null) throw new ArgumentException("Provided document is not supported by this storage."); File.WriteAllText(path, textDocument.Text); } /// public bool CanRead(string path) { // Open the file FileStream file = File.OpenRead(path); // Read a small chunk (1kb should be enough) byte[] buffer = new byte[1024]; int read = file.Read(buffer, 0, buffer.Length); // Close file file.Close(); // Find 4 consecutive zero bytes int cnt = 0; for (int i = 0; i < read; i++) { // Count zero bytes if (buffer[i] == 0) ++cnt; else cnt = 0; // Found > 4? Most likely binary file if (cnt >= 4) return false; } // Not found, probably text file return true; } } }