请解释Byte流和字符流是什么.这究竟是什么意思?Microsoft Word文档是面向字节还是面向字符?
谢谢
我不明白我在这里做错了什么.我生成了几个内存流,在调试模式下,我看到它们已经填充.但是当我尝试复制MemoryStream到FileStream为了保存文件时fileStream没有填充文件并且文件长度为0bytes(空).
这是我的代码
if (file.ContentLength > 0)
{
var bytes = ImageUploader.FilestreamToBytes(file); // bytes is populated
using (var inStream = new MemoryStream(bytes)) // inStream is populated
{
using (var outStream = new MemoryStream())
{
using (var imageFactory = new ImageFactory())
{
imageFactory.Load(inStream)
.Resize(new Size(320, 0))
.Format(ImageFormat.Jpeg)
.Quality(70)
.Save(outStream);
}
// outStream is populated here
var fileName = "test.jpg";
using (var fileStream = new FileStream(Server.MapPath("~/content/u/") + fileName, FileMode.CreateNew, FileAccess.ReadWrite))
{
outStream.CopyTo(fileStream); // fileStream is not populated …Run Code Online (Sandbox Code Playgroud) 我一直在使用File.ReadAllText来获取一些csv,但每次忘记在Excel中关闭文件时,应用程序都会抛出异常,因为它无法访问该文件.
(对我来说似乎很疯狂,我的意思是ReadAllText中的READ似乎很清楚)
我知道File.Open有所有的花里胡哨,但有没有'中间'方法,不涉及到缓冲区和字符串数组?
是的,我很懒,所以投我一票,先给我答案:)
我显然已经习惯了一个糟糕的编码习惯.这是我写的代码示例:
using(StreamReader sr = new StreamReader(File.Open("somefile.txt", FileMode.Open)))
{
//read file
}
File.Move("somefile.txt", "somefile.bak"); //can't move, get exception that I the file is open
Run Code Online (Sandbox Code Playgroud)
我认为,因为using条款明确要求Close(),并Dispose()在StreamReader该FileStream会也关闭.
我能解决问题的唯一方法是将上面的块更改为:
using(FileStream fs = File.Open("somefile.txt", FileMode.Open))
{
using(StreamReader sr = new StreamReader(fs))
{
//read file
}
}
File.Move("somefile.txt", "somefile.bak"); // can move file with no errors
Run Code Online (Sandbox Code Playgroud)
应该StreamReader通过在第一个区块中关闭而关闭底层FileStream?或者,我错了吗?
我决定发布实际的违规代码块,看看我们是否可以深入了解这一点.我现在很好奇.
我以为我在using条款中遇到了问题,所以我把所有内容都扩展了,每次都无法复制.我在这个方法调用中创建了文件,所以我认为其他任何文件都没有打开句柄.我还验证了Path.Combine调用返回的字符串是否正确.
private static void GenerateFiles(List<Credit> credits)
{
Account i; …Run Code Online (Sandbox Code Playgroud) 我有两个文本文件,Source.txt和Target.txt.源将永远不会被修改并包含N行文本.所以,我想删除Target.txt中的特定文本行,并用Source.txt中的特定文本行替换,我知道我需要的行数,实际上是行号2,两个文件.
我有这样的事情:
string line = string.Empty;
int line_number = 1;
int line_to_edit = 2;
using (StreamReader reader = new StreamReader(@"C:\source.xml"))
{
using (StreamWriter writer = new StreamWriter(@"C:\target.xml"))
{
while ((line = reader.ReadLine()) != null)
{
if (line_number == line_to_edit)
{
writer.WriteLine(line);
}
line_number++;
}
}
}
Run Code Online (Sandbox Code Playgroud)
但是当我打开Writer时,目标文件被擦除,它会写入行,但是,当打开时,目标文件只包含复制的行,其余的则丢失.
我能做什么?
我知道如何编码/解码一个简单的字符串到/从base64.
但是,如果数据已经写入FileStream对象,我该怎么做呢?假设我只能访问FileStream对象,而不能访问之前存储的原始数据.在将FileStream刷新到文件之前,如何将FileStream编码为base64.
在我将FileStream写入文件之后,我可以打开我的文件并对其进行编码/解码,但我想一步一步完成所有这一切,而不是一个接一个地执行两个文件操作.该文件可能更大,并且在刚刚保存一段时间后再加载,编码并再次保存它也需要两倍的时间.
也许有人认识一个更好的解决方案?我可以将FileStream转换为字符串,对字符串进行编码,然后将字符串转换回FileStream,例如,我将做什么以及这样的代码将如何?
我在其上启用了FILESTREAM数据库设置(如果您转到实例上的Properties\Advanced,则表明已启用FILESTREAM).在执行此操作后,我还在其上运行了sp_configure脚本以启用访问(以确保它已启用).但是......一旦我尝试更改数据库并向其添加文件组,它就会说该功能已被禁用.
我在同一台计算机上的其他实例上启用了它,这些工作正常.只有这一个不起作用.我一直无法找到任何好的建议,为什么它不起作用.
它是SQL 2008 R2实例.
我知道在C++中,您可以使用以下方式查看下一个字符:in.peek();.
当我试图"查看"C中文件的下一个字符时,我该怎么做呢?
我正在使用此代码保存上传的图像:
using (var fileStream = File.Create(savePath))
{
stream.CopyTo(fileStream);
}
Run Code Online (Sandbox Code Playgroud)
当图像保存到目标文件夹时,它是空的,0 kb.这可能有什么不对吗?我在复制之前检查了stream.Length并且它不是空的.
我有一个描述分组数据结构的二进制文件规范.每个数据包都有一个两字节的同步模式,因此可以使用BinaryReader和FileStream组合扫描数据包的开头:
while(!reader.EndOfFile)
{
// Check for sync pattern.
if (reader.ReadUInt16() != 0xEB25)
{
// Move to next byte.
reader.BaseStream.Seek(-1, SeekOrigin.Current);
continue;
}
// If we got here, a sync pattern was found.
}
Run Code Online (Sandbox Code Playgroud)
这个过程在向前方向上完全正常,但在相反方向扫描的类似代码至少慢两个数量级:
while(!reader.BeginningOfFile)
{
// Check for sync pattern.
if (reader.ReadUInt16() != 0xEB25)
{
// Move to previous byte.
reader.BaseStream.Seek(-3, SeekOrigin.Current);
continue;
}
// If we got here, a sync pattern was found.
}
Run Code Online (Sandbox Code Playgroud)
我已经尝试了一些解决方法,比如向后移动一个任意数量(当前为1兆字节)并向前扫描,但很明显我真正需要的是一个BinaryReader或FileStream那个被修改为具有足够的性能特征,同时读取前进和反方向.
我已经有一个FastFileStream通过子类化普通FileStream和缓存 …
filestream ×10
c# ×7
.net-3.5 ×1
asp.net ×1
base64 ×1
buffer ×1
c ×1
dispose ×1
file ×1
file-upload ×1
iostream ×1
java ×1
memorystream ×1
peek ×1
reverse ×1
sql ×1
stdio ×1
stream ×1
streamreader ×1
string ×1
text-files ×1