Для всех, кто говорит, что нужно получить байты, скопируйте его в MemoryStream
и т. Д. - если предполагается, что содержимое не должно превышать объем памяти компьютера, разумно ожидать, что можно просто использовать StreamReader
's встроенный ReadLine()
или ReadToEnd()
?Я видел, что они даже не упоминались, и они делают все для вас.
У меня был сценарий использования, когда я просто хотел сохранить путь к файлу SQLite из FileDialogResult
, который пользователь выбирает в процессе синхронизации / инициализации.Затем моей программе необходимо использовать этот путь при запуске для обычных процессов приложения.Возможно, это не идеальный способ сбора / повторного использования информации, но он не сильно отличается от записи / чтения из INI-файла - я просто не хотел устанавливать один для одного значения.Поэтому я просто прочитал его из плоского однострочного текстового файла.Вот что я сделал:
string filePath = Path.GetDirectoryName(Assembly.GetExecutingAssembly().Location);
if (!filePath.EndsWith(@"\")) temppath += @"\"; // ensures we have a slash on the end
filePath = filePath.Replace(@"\\", @"\"); // Visual Studio escapes slashes by putting double-slashes in their results - this ensures we don't have double-slashes
filePath += "SQLite.txt";
string path = String.Empty;
FileStream fs = new FileStream(filePath, FileMode.Open);
StreamReader sr = new StreamReader(fs);
path = sr.ReadLine(); // can also use sr.ReadToEnd();
sr.Close();
fs.Close();
fs.Flush();
return path;
Если вам ДЕЙСТВИТЕЛЬНО нужен byte[]
вместо string
по какой-то причине, используя мой пример, вы всегда можете сделать:
byte[] toBytes;
FileStream fs = new FileStream(filePath, FileMode.Open);
StreamReader sr = new StreamReader(fs);
toBytes = Encoding.ASCII.GetBytes(path);
sr.Close();
fs.Close();
fs.Flush();
return toBytes;
(Возвращая toBytes
вместо path
.)
Если вы не хотите ASCII
, вы можете легко заменить его на UTF8
, Unicode
и т. Д.