我知道我可以使用以下代码行从其他位置加载app.config文件:
AppDomain.CurrentDomain.SetData("APP_CONFIG_FILE", ConfigFile);
Run Code Online (Sandbox Code Playgroud)
其中ConfigFile是完整路径位置.我想做的是能够加载已为app.config加密的文件.理想情况下,我希望能够加载文件,解密它,并将其加载到字符串或内存流中,并将其传递给应用程序,就好像它是app.config一样.我知道我可以从中加载所有值并手动访问它们,但我希望能够使用.NET的内置功能访问它们.有没有办法告诉应用程序使用除文件以外的配置文件?
另一种选择是打开文件,解密它,把它写到临时文件,然后使用上面的代码以这种方式引用它,但如果有一种更简单的方法,理想情况下,我想找到它,必须避免处理其他文件.
正如前面所讨论的,当一个BinaryReader在或的BinaryWriter被关闭,它的底层流中获取关闭以及(AARGH).考虑一下这种情况:一个例程R传递给一个MemoryStream,比如说M; 我想写一些东西M,然后将它传递给另一个例程进行更多处理(不一定写).为方便起见,我想M用BinaryWriter 包装来写我的文章.写完之后,我已经完成了BinaryWriter,但没有完成M.
void R(MemoryStream M)
{
using (B = new BinaryWriter(M))
{
// write some stuff using B
}
S(M); // now pass M to another routine for further processing
}
Run Code Online (Sandbox Code Playgroud)
但是,我无法在不关闭的情况下处理BinaryStream M.
问:有没有办法做以下任何一种情况?
我正在尝试使用iTextSharp创建一个pdf文件.我的尝试将pdf的内容写入MemoryStream,因此我可以将结果写入文件和数据库BLOB.创建文件,大小约为21kB,当使用Notepad ++打开时,它看起来像一个pdf.但是我的PDF查看器说它已经被破坏了.这是一个小代码片段(只尝试写入文件,而不是数据库):
Document myDocument = new Document();
MemoryStream myMemoryStream = new MemoryStream();
PdfWriter myPDFWriter = PdfWriter.GetInstance(myDocument, myMemoryStream);
myDocument.Open();
// Content of the pdf gets inserted here
using (FileStream fs = File.Create("D:\\...\\aTestFile.pdf"))
{
myMemoryStream.WriteTo(fs);
}
myMemoryStream.Close();
Run Code Online (Sandbox Code Playgroud)
我犯的错误在哪里?
谢谢你,诺伯特
我正在使用一个具有相当多函数的库,这些函数可以写入FILE但没有一个可以方便地将相同数据转储到内存中的对象.有没有办法创建一个FILE对象(或覆盖它),将数据存储在内存而不是写入磁盘 - 我想避免一遍又一遍地打开/写入/读取文件的性能.
更新:根据Rob的建议,尝试使用stringstream:
ss.put(c);
std::string myval = ss.str();
printf("Value: %s\n after writing: %i length %lu\n",myval.c_str(),c, myval.length());
Run Code Online (Sandbox Code Playgroud)
但是,现在试图从字符串流中获取数据(二进制)让我陷入困境 - 我如何获取我一直在添加的二进制数据?
我正在为一个浏览器应用程序编写一个系统,它将一些特定的PHP脚本存储在一个数据库中,然后将它们拉出来并在需要时执行它们.起初我尝试使用exec()和管道输出一个脚本的输出,该脚本将脚本从数据库中取出并打印出来.这在一个用例中起作用,但不是全部,并且无论如何都感觉很脆弱,所以我正在寻找一种更好的方法.
我现在正试图通过在内存中使用PHP文件流来实现这一目标.例如:
$thing = <<<'TEST'
<?php
$thing = array();
print "Testing code in here.";
var_dump($thing);
?>
TEST;
$filename = "php://memory";
$fp = fopen($filename, "w+b");
fwrite($fp, $thing);
//rewind($fp);
fclose($fp);
include "php://memory";
Run Code Online (Sandbox Code Playgroud)
但是,执行脚本时不会打印任何内容.这是否可能通过这种方式,如果没有,还有另一种方法吗?我正在努力避免编写临时文件并从中读取文件,因为我确信访问文件系统会减慢速度.是否有一个我可以提供给"include"的URL,以便它将读取内存流,就像它是一个文件一样?
我不认为eval()会这样做,因为,如果我没记错的话,它只限于一行.
另外,请不要"eval = include = hell"答案.非管理员用户无权编写存储在数据库中的脚本,我知道这需要对我的应用程序的生命周期进行特殊处理.
哪一个更好:MemoryStream.WriteTo(Stream destinationStream)或者Stream.CopyTo(Stream destinationStream)??
我正在谈论没有Buffer的这两种方法的比较,因为我这样做:
Stream str = File.Open("SomeFile.file");
MemoryStream mstr = new MemoryStream(File.ReadAllBytes("SomeFile.file"));
using(var Ms = File.Create("NewFile.file", 8 * 1024))
{
str.CopyTo(Ms) or mstr.WriteTo(Ms);// Which one will be better??
}
Run Code Online (Sandbox Code Playgroud)
这是我想要做的:
我写了一些实际工作正常的代码.
但是现在我正在优化代码以提高效率.
我正在使用XmlWriter创建一个文件,XmlWriter writer = XmlWriter.Create(fileName);它正在创建一个文件然后我还有一个我正在调用的函数, private void EncryptFile(string inputFile, string outputFile)它需要2个字符串输入和outpulfile,最后我有两个文件,一个是加密的,一个不是.我只想要一个加密文件,但是我的加密函数需要输入由XmlWriter创建的inputfile.有没有什么办法可以创建内存流并将其传递给我的函数而不是创建一个输入文件.我的加密功能
private void EncryptFile (string inputFile, string outputFile)
string password = @"fdds"; // Your Key Here
UnicodeEncoding UE = new UnicodeEncoding();
byte[] key = UE.GetBytes(password);
string cryptFile = outputFile;
FileStream fsCrypt = new FileStream(cryptFile, FileMode.Create);
RijndaelManaged RMCrypto = new RijndaelManaged();
CryptoStream cs = new CryptoStream(fsCrypt,RMCrypto.CreateEncryptor(key,key),CryptoStreamMode.Write);
FileStream fsIn = new FileStream(inputFile, FileMode.Open);
int data;
while ((data = fsIn.ReadByte()) != -1)
cs.WriteByte((byte)data);
cs.FlushFinalBlock();
fsIn.Close();
cs.Close();
fsCrypt.Close();
}
}
Run Code Online (Sandbox Code Playgroud) 我有这样的方法:
public DataObject GetClipboardData()
{
var result = new DataObject();
result.SetText(this.fallbackText.ToString());
result.SetData(DataFormats.Html, this.GenerateHtml(), false);
return result;
}
Run Code Online (Sandbox Code Playgroud)
哪里GenerateHtml返回一个MemoryStream.
我是否需要担心关闭MemoryStream物体?或者我应该使用其他类型的对象将原始字节放在剪贴板上?
(我试过,byte[]但这会将文字"System.Byte[]"或类似文字放在剪贴板上)
有没有办法将System.Drawing.Image附加到电子邮件而不保存它,然后从保存的路径中抓取它.
现在我正在创建图像并保存它.然后我发送电子邮件:
MailMessage mail = new MailMessage();
string _body = "body"
mail.Body = _body;
string _attacmentPath;
if (iP.Contains(":"))
_attacmentPath = (@"path1");//, System.Net.Mime.MediaTypeNames.Application.Octet));
else
_attacmentPath = @"path2");
mail.Attachments.Add(new Attachment(_attacmentPath, System.Net.Mime.MediaTypeNames.Application.Octet));
mail.To.Add(_imageInfo.VendorEmail);
mail.Subject = "Rouses' PO # " + _imageInfo.PONumber.Trim();
mail.From = _imageInfo.VendorNum == 691 ? new MailAddress("email", "") : new MailAddress("email", "");
SmtpClient server = null;
mail.IsBodyHtml = true;
mail.Priority = MailPriority.Normal;
server = new SmtpClient("server");
try
{
server.Send(mail);
}
catch
{
}
Run Code Online (Sandbox Code Playgroud)
无论如何直接将System.Drawing.Image传递给mail.Attachments.Add()?
我正在使用带有C#和Azure的Web Api 2,以及如何返回图像(从Memorystream基础)以便在页面上显示的问题...
这是我的Controller HTTPGET
[Route("api/PhotoSubmit/GetPhoto/{id}")]
[HttpGet]
public HttpResponseMessage GetPhotoById(int id)
{
StorageServices storage = new StorageServices();
MemoryStream ms = storage.DownloadBlob(id);
// return what ?
}
Run Code Online (Sandbox Code Playgroud)
这是servicecall的开头:
$http({
method: 'GET',
url: 'api/PhotoSubmit/GetPhoto/' + $routeParams.id,
accept: 'application/json'
})
.success(function(result) {
// How do i handle the result and what HTML should i use ? <img ?
});
Run Code Online (Sandbox Code Playgroud)