相关疑难解决方法(0)

每种编程语言中的文件I/O.

这必须是所有程序员不时有的常见问题.如何从文本文件中读取一行?然后下一个问题是我如何写回来.

当然,大多数人在日常编程中都使用高级框架(可以在答案中使用)但有时候知道如何在较低级别进行编程也很好.

我自己知道该怎么做的C,C++以及Objective-C,但它肯定会得心应手,看看它是如何在所有流行的语言来完成,如果仅仅是为了帮助我们做出什么语言来尽我们的文件IO在一个更好的决定.特别是我认为这将是有趣的,看看它是如何在字符串操作语言完成,如:python,ruby当然perl.

所以我想在这里我们可以创建一个社区资源,我们可以为我们的配置文件加注星标,并参考我们何时需要以某种新语言进行文件I/O. 更不用说曝光我们都会得到我们日常不处理的语言.

这是你需要回答的方式:

  1. 创建一个名为" fileio.txt " 的新文本文件
  2. 将第一行"hello"写入文本文件.
  3. 将第二行"world"附加到文本文件.
  4. 将第二行"world"读入输入字符串.
  5. 将输入字符串打印到控制台.

澄清:

  • 您应该仅针对每个答案以一种编程语言显示如何执行此操作.
  • 假设文本文件事先不存在
  • 写完第一行后,无需重新打开文本文件

对语言没有特别限制. C,C++,C#,Java,Objective-C都是伟大的.

如果你知道如何做到这一点的Prolog,Haskell,Fortran,Lisp,或Basic则请请便.

language-agnostic file-io programming-languages

127
推荐指数
54
解决办法
8万
查看次数

什么可能导致"目标多字节代码页中不存在Unicode字符的映射"?

我有一个EurekaLog错误报告显示EEncodingError.日志指向TFile.AppendAllText.我打电话TFile.AppendAllText是我的这个程序:

procedure WriteToFile(CONST FileName: string; CONST uString: string; CONST WriteOp: WriteOpperation; ForceFolder: Boolean= FALSE);     // Works with UNC paths
begin
 if NOT ForceFolder
 OR (ForceFolder AND ForceDirectoriesMsg(ExtractFilePath(FileName))) then
   if WriteOp= (woOverwrite)
   then IOUtils.TFile.WriteAllText (FileName, uString)
   else IOUtils.TFile.AppendAllText(FileName, uString);
end;
Run Code Online (Sandbox Code Playgroud)

这是来自EurekaLog的信息.

在此输入图像描述

在此输入图像描述

是什么导致这种情况发生?

delphi unicode delphi-xe7

12
推荐指数
1
解决办法
1万
查看次数

unicode文本文件输出在XE2和Delphi 2009之间有所不同?

当我尝试下面的代码时,与D2009相比,XE2中的输出似乎不同.

procedure TForm1.Button1Click(Sender: TObject);
var Outfile:textfile;
    myByte: Byte;

begin
  assignfile(Outfile,'test_chinese.txt');
  Rewrite(Outfile);

  for myByte in TEncoding.UTF8.GetPreamble do write(Outfile, AnsiChar(myByte));
  //This is the UTF-8 BOM

  Writeln(Outfile,utf8string('??'));
  Writeln(Outfile,'°C');
  Closefile(Outfile);
end;
Run Code Online (Sandbox Code Playgroud)

在Windows 8 PC上使用XE2进行编译可以使用写字板

?? C

txt十六进制代码:EF BB BF 3F 3F 0D 0A B0 43 0D 0A

在Windows XP PC上使用D2009进行编译可以在Wordpad中进行

总结°C

txt十六进制代码:EF BB BF E6 80 BB E7 BB 93 0D 0A B0 43 0D 0A

我的问题是它为什么不同,我如何使用旧的文本文件I/O将中文字符保存到文本文件?

谢谢!

delphi unicode utf-8

8
推荐指数
3
解决办法
9375
查看次数

将文本文件读入数组

我如何将文件从磁盘上的文件读入内存中的数组?

另外,我注意到使用ReadLn只显示了第一行(看起来很明显,因为它是ReadLn,但我将如何阅读整个文本文档?)

delphi

3
推荐指数
2
解决办法
8178
查看次数

System.IOUtils.TDirectory.GetParent 奇怪的行为?

的结果GetParent('c:\1\2\')'c:\1\2'

的结果GetParent('c:\1\2')'c:\1'

这是正常/预期的行为吗?如果是,其背后的逻辑是什么?

delphi

3
推荐指数
1
解决办法
404
查看次数

如何将经典的Delphi字符串保存到磁盘(并将其读回)?

我想在Delphi中实现一个非常基本的任务:将字符串保存到磁盘并加载回来.这似乎是微不足道的,但是自从我升级到IOUtils之后我做了这个TWICE就遇到了问题(之前还有一次......这就是为什么我把'辉煌'的决定升级到IOUtils).

我使用这样的东西:

procedure WriteToFile(CONST FileName: string; CONST uString: string; CONST WriteOp: WriteOperation);    
begin
   if WriteOp= (woOverwrite)
   then IOUtils.TFile.WriteAllText (FileName, uString)  //overwrite
   else IOUtils.TFile.AppendAllText(FileName, uString); //append
end;    
Run Code Online (Sandbox Code Playgroud)

简单吧?怎么可能出错?好吧,我最近在IOUtils中遇到了另一个(另一个)错误.所以,TFile是错误的.该缺陷详述这里.

任何人都可以分享一个不是基于IOUtils的替代方案(或仅仅是你的想法/想法)并且它已知可行吗?嗯......上面的代码也为我工作了一段时间......所以,我知道如果难以保证一段代码(无论多小)将真正起作用!

另外,我真的希望让我的WriteToFile过程在可能的情况下将字符串保存到ANSI文件(uString仅包含ANSI字符),否则为Unicode.
然后ReadAFile函数应自动检测编码并正确读回字符串.
我们的想法是,仍有文本编辑器会错误地打开/解释Unicode/UTF文件.因此,只要有可能,请向用户提供一个好的旧ANSI文本文件.

所以:
- 覆盖/追加
- 尽可能保存为ANSI
- 内存效率(当加载文件为2GB时不要吃4GB内存)
- 应该使用任何文本文件(最多2GB,显然)
- 没有IOUtils(太小车有用)

delphi unicode delphi-xe7

-1
推荐指数
1
解决办法
1037
查看次数