【问题标题】:Text and binary data in the same file同一文件中的文本和二进制数据
【发布时间】:2011-08-02 07:12:08
【问题描述】:
CString strFile = "c:\\test.txt";

CStdioFile aFile;

UINT nOpenFlags = CFile::modeWrite | CFile::modeCreate | CFile::typeText;

CFileException anError;

if (!aFile.Open(strFile, nOpenFlags, &anError))
{
    return false
}

int nSize = 4*sizeof(double);
double* pData = new double[2];

CString strLine, str;

// Write begin of header
strLine = _T(">>> Begin of header <<<\n");
aFile.WriteString(strLine);

// Retrieve current position of file pointer
int lFilePos = (long) aFile.GetPosition();

// Close file
aFile.Close();

nOpenFlags = CFile::modeWrite | CFile::typeBinary;

if (!aFile.Open(strFile, nOpenFlags, &anError))
{
    return false;
}

for(int i = 0 ; i < 2 ; i++)
{
    pData[i] = i;     
}

// Set position of file pointer behind header
aFile.Seek(lFilePos, CFile::begin);

// Write complex vector
aFile.Write(pData, nSize);

// Write complex vector
aFile.Write(pData, nSize);

// Close file
aFile.Close();

打算创建一个包含文本数据和二进制数据的文件。此代码是用 MFC 编写的。我想类似地在 C# 中创建一个包含文本数据 a 和二进制数据的文件。请告诉我使用哪个流类来创建它

【问题讨论】:

  • UNICODE 是否在编译时定义?

标签: c# c++ mfc


【解决方案1】:

文本可以写入二进制数据 => 只需对整个文件使用二进制模式即可。

文本模式所做的唯一事情是在写入时将“\n”转换为“\r\n”,然后在读取时转换回来。由于该文件部分是二进制文件,因此无论如何都不能在常规文本编辑器中进行编辑,因此您不需要该转换。如果该文件仅适用于您的应用程序,则您不必在意,如果它适用于其他应用程序,只需手动使用它需要的任何换行符序列。

【讨论】:

  • 如果我对整个文件使用二进制模式。文本数据是否以可读格式显示?
  • @Raghaav:是的,如果你愿意的话。这是最容易实现的,例如长度前缀。
  • 不好意思问这个长度前缀是什么。
  • FileStream aaFileStream = new FileStream(@"c:\\welcometostream.rda", FileMode.OpenOrCreate, FileAccess.Write, FileShare.None); BinaryWriter aBinaryWriter = new BinaryWriter(aaFileStream); aBinaryWriter.Write(string.Format("PatientName:{0}", "RajeevVerma")); aBinaryWriter.Close(); Console.Read();
  • 请参考附件代码。我得到了一些奇怪的结果
【解决方案2】:

至于 C#,this S.O. article 可能会给你想要的答案。

C# 解决方案还可以指导您为 c 编写类似的东西,但我怀疑您是靠自己的,即您可以使用通用读/写文件。在 C++ 中,您可以使用 operator&gt;&gt;operator&lt;&lt; 对流进行格式化输入/输出。

【讨论】:

  • FileStream aaFileStream = new FileStream(@"c:\\welcometostream.rda", FileMode.OpenOrCreate, FileAccess.Write, FileShare.None); BinaryWriter aBinaryWriter = new BinaryWriter(aaFileStream); aBinaryWriter.Write(string.Format("PatientName:{0}", "RajeevVerma")); aBinaryWriter.Close(); Console.Read();输出是 PatientName:RajeevVerma 为什么要插入奇怪的字符。应该读取正在输入文件的字符串
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2011-08-27
  • 2014-07-30
  • 2023-03-31
  • 1970-01-01
  • 2011-10-30
相关资源
最近更新 更多