我对特定的BinaryReader操作感到困惑.
使用十六进制编辑器(UltraEdit)查看二进制文件时,前四个字节为:52 62 38 11.
当使用a迭代同一个文件时BinaryReader,如果我ReadInt32()先调用,我希望int值为1,382,168,593.
.ReadInt32():从当前流中读取一个4字节有符号整数,并将流的当前位置提前四个字节.
相反,我得到288,907,858.
很明显,我错过了一些明显的东西......谁能解释一下发生了什么?
也许在Stackoverflow中提出了类似的问题,但我似乎无法找到解决问题的方法.
我只想打开一个可写的二进制流,并能够使用相同的流将数据附加到该文件.显然,如果您打开一个文件进行写入,它将删除它包含的所有数据并启动一个新文件.另外,如果你打开一个文件只是为了阅读,你不能写,但只能阅读.人们确实建议在线使用两个独立的流 - 一个用于阅读,另一个用于写作.我认为在这种情况下不会起作用.
看看我的示例代码,我想做类似的事情:
fs:BinaryWriter;
fs := new BinaryWriter(File.Create('c:\test.dat'));
fs.seek(0,SeekOrigin.End);
fs.Write('test string');
fs.Close;
Run Code Online (Sandbox Code Playgroud) 我想在c#中读取文件(图像)和另一个文件视频,并在单个txt文件中保存(写入)两个文件的所有内容(一个接一个).现在我想再次检索第一个图像文件内容和第二个文件内容分开.是否可以读取视频和图像文件以保存在单个文件中.
我试图通过套接字发送一个值.所以我在我的项目客户端和服务器中有两个部分.
客户端使用以下代码向服务器发送值:
NetworkStream networkStream = socketForServer.GetStream();
System.IO.BinaryWriter binaryWriter =
new System.IO.BinaryWriter(networkStream);
//------
int messageSource = 0;
int messageDesitination = 0;
int interlockingId = 0;
int trackId = 0;
int trainId = 2;
int direction = 0;
int messageType = 0;
int informationType = 0;
int dateTime = 0;
foreach (Sensor LeftSensorList in LeftSensor)
{
binaryWriter.Write(messageSource);
binaryWriter.Write(messageDesitination);
binaryWriter.Write(interlockingId);
binaryWriter.Write(trackId);
binaryWriter.Write(trainId);
binaryWriter.Write(direction);
binaryWriter.Write(messageType);
binaryWriter.Write(informationType);
binaryWriter.Write(dateTime);
binaryWriter.Flush();
binaryWriter.Close();
Thread.Sleep(4000);
}
Run Code Online (Sandbox Code Playgroud)
在服务器部分我应该读取二进制值:
static void Listeners()
{
Socket socketForClient = tcpListener.AcceptSocket();
if (socketForClient.Connected)
{
NetworkStream …Run Code Online (Sandbox Code Playgroud) 您好我正在尝试使用BinaryReader/BinaryWriter建立聊天,我陷入了死胡同,我无法弄清楚如何让我的服务器将消息发送给所有连接的客户端..
我已经尝试将所有客户端添加到列表中并在列表上运行foreach循环,以将消息发送到每个连接的客户端,但没有进行锻炼.
服务器:
using System;
using System.IO;
using System.Net;
using System.Net.Sockets;
using System.Threading;
namespace server {
internal class Program {
public static int counter = 0;
//List<Client> clientList = new List <Client>();
private static readonly IPAddress sr_ipAddress = IPAddress.Parse("127.0.0.1");
public TcpListener Listener = new TcpListener(sr_ipAddress, 8888);
public static void Main(string[] args) {
Program server = new Program();
server.Start();
Console.ReadKey();
}
public void Start() {
Listener.Start();
Console.WriteLine("Server started");
StartAccept();
}
private void StartAccept() {
Listener.BeginAcceptTcpClient(HandleAsyncConnection, Listener);
}
public void HandleAsyncConnection(IAsyncResult res) …Run Code Online (Sandbox Code Playgroud) 我有一个表单应用程序执行模拟并不断读取/写入二进制文件.如果让它通过,一切正常.但是,如果表单已关闭/模拟已中止,则文件流未正确关闭 - 文件将被锁定.有没有办法确保所有流关闭?我尝试了以下 - 但它没有效果......非常感谢,T
public BinaryWriter BinWrite;
public BinaryReader BinRead;
public BinaryWriter EnvBinWrite;
public BinaryReader EnvBinRead;
public void theForm_FormClosing(object sender, FormClosingEventArgs e)
{
//Close all binary file reader/writers -- crashes if it cannot overwrite files
foreach (Building B in AllBldgs)
{
try
{
EnvBinRead.Close();
}
catch
{ continue; }
try
{
EnvBinWrite.Close();
}
catch
{ continue; }
try
{
BinRead.Close();
}
catch
{ continue; }
try
{
BinWrite.Close();
}
catch
{ continue; }
}
}
Run Code Online (Sandbox Code Playgroud) binaryreader ×6
binarywriter ×5
c# ×5
.net ×1
append ×1
delphi-prism ×1
file ×1
filestream ×1
sockets ×1
tcpclient ×1