Я хочу добавить файл .mdb в ресурс, и во время работы я хочу скопировать файл .mdb в другое место, выполнить подключение, запустить его и удалить скопированный файл .mdb, пока я закончил обработку с файлом .mdb.

Как это сделать с помощью Assembly.GetManifestStream? если не с помощью Assembly.GetManifestStream, каковы другие способы, с помощью которых я могу это сделать?

0
user251334 10 Фев 2010 в 07:15

2 ответа

Да, Assembly.GetManifestStream лучше всего сочетается с BinaryReader и BinaryWriter. А именно:

// assembly is Assembly containing the resource
// path is string containing path to write to
Stream source = assembly.GetManifestResourceStream("Namespace.filename.mdb");
BinaryReader br = new BinaryReader(source);
BinaryWriter bw = new BinaryWriter(path, FileMode.Create);
byte[] buffer = new byte[256];
int count = 0;
while((count = br.Read(buffer, 0, 256)) > 0) {
    bw.Write(buffer, 0, count);
}

Очевидно, что все эти IDisposable должны быть заключены в блок using.

2
jason 10 Фев 2010 в 07:26
Спасибо за ответ, Джейсон, я тоже не знал, как это сделать для встроенных ресурсов. Я попробовал, и это сработало. Для тех, кто не знает: просто добавьте файл, который необходимо извлечь, в свой проект и установите для его свойства «Build Action» значение «Embedded Resource». Я скопировал abc.def в каталог, содержащий мой файл .cssproj, нажал кнопку «Показать все файлы» в обозревателе решений в VS2008, а затем щелкнул правой кнопкой мыши abc.def и включил его в свой проект.
 – 
AndrewJacksonZA
10 Фев 2010 в 09:24

Почему вы не можете просто использовать копию на уровне файлов? Не уверен, почему вы хотите сделать это с потоком. Просто найдите путь к файлу mdb и

File.Copy(path1,path2);
0
chamiltongt 10 Фев 2010 в 07:23
Если OP хочет встроить файл в выходной файл своего проекта, метод, опубликованный Джейсоном, работает. Если нет, OP может установить для действия сборки файла значение «Содержимое», установить соответствующий параметр «Копировать в выходной каталог», а затем использовать старый добрый File.Copy, а затем File.Delete.
 – 
AndrewJacksonZA
10 Фев 2010 в 09:27
Проблема в том, что я хочу использовать это при написании модульных тестов... я назначаю это в настройке, в разрыве я хочу удалить созданный файл, при удалении файла используется ошибка
 – 
user251334
11 Фев 2010 в 08:10