Questions tagged «file-handling»

文件处理是指与文件和文件句柄一起使用的一组工具,功能和库。创建,写入,附加,移动和删除文件属于此域。

12
将大文件(10 MB)存储在数据库中是不好的做法吗?
我当前正在创建一个Web应用程序,允许用户存储和共享1 MB-10 MB的文件。 在我看来,将文件存储在数据库中将大大降低数据库访问速度。 这是一个有效的问题吗?将文件存储在文件系统中并将文件名和路径保存在数据库中是否更好?使用数据库时,是否有与存储文件有关的最佳实践? 我正在该项目的PHP和MySQL中工作,但是对于大多数环境(Ruby on Rails,PHP,.NET)和数据库(MySQL,PostgreSQL)都是相同的问题。

8
'\ n'和'\ r \ n'之间的区别
是的,我知道可以'\n'在UNIX 中写换行符,而对于Windows,则有两个字符序列:'\r\n'。从理论上讲,所有这些都很好,但是我的问题是为什么?为什么在Windows中回车符是多余的?如果UNIX可以做到这一点,\n为什么Windows则需要两个字符来完成呢? 我正在阅读David Beazley的Python书,他说: 例如,在Windows上,写入字符'\ n'实际上会输出两个字符的序列'\ r \ n'(并且在读回文件时,'\ r \ n'被转换回单个'\ n'字符)。 为什么要付出额外的努力? 我会说实话。我很早就知道它们之间的区别了,但是从来没有问过为什么。我希望今天能回答。 谢谢你的时间。

6
是否应该将临时文件保存到/ tmp或当前工作目录?
我有一个需要生成临时文件的程序。它是为集群计算机编写的。 如果我将这些文件保存到系统范围的临时目录(例如:)/tmp,则一些用户抱怨该程序失败,因为他们没有对/ tmp的正确访问权限。但是,如果我将这些文件保存到工作目录中,这些用户还抱怨说,他们不想看到那些神秘的文件。 哪个是更好的做法?我是否应该坚持认为保存/tmp是正确的方法,并以“按预期方式工作”来捍卫任何失败(例如,请问您的管理员适当的许可/访问权)?

5
我应该传递要打开的文件名还是打开文件?
假设我有一个处理文本文件的函数-例如,读取文本文件并删除单词“ a”。我可以将其传递给文件名并处理函数中的打开/关闭,也可以将其传递给打开的文件并期望有人调用它可以处理关闭它的问题。 第一种方法似乎是一种更好的方法,可以确保没有文件保持打开状态,但是会阻止我使用StringIO对象之类的东西 第二种方法可能有点危险-无法知道文件是否将关闭,但是我可以使用类似文件的对象 def ver_1(filename): with open(filename, 'r') as f: return do_stuff(f) def ver_2(open_file): return do_stuff(open_file) print ver_1('my_file.txt') with open('my_file.txt', 'r') as f: print ver_2(f) 这些通常是其中之一吗?通常是否期望某个函数以这两种方式之一运行?还是应该对其进行详细记录,以便程序员可以适当地使用该函数?

3
写入临时位置,然后将其复制到目标位置有什么好处?
我正在编写一个可处理卫星图像的应用程序,老板要求我研究一些商业应用程序,并观察它们的表现。我发现了一个奇怪的行为,然后在寻找时,我也在其他标准应用程序中发现了它。 这些程序首先写入temp文件夹,然后将其复制到预期的目标位置。 示例:7zip首先提取到temp文件夹,然后将提取的数据复制到您要求其将数据提取到的位置。 我看到这种方法的几个问题: 临时文件夹可能没有足够的空间,而预期的位置可能有那么多的空间。 如果文件很大,则复制操作可能会花费很短的时间。 我考虑了很多,但是我看不出这样做有什么积极的意义。我是否缺少某些东西,或者这样做真的有好处?

4
使用平面文件与数据库/ API进行前端和后端之间的传输
我有一个应用程序,在几个开发人员之间引起了相当激烈的讨论。 基本上,它分为Web层和后端层。Web层通过一个简单的Web表单收集信息,并将此数据作为JSON文档(字面上是.json文件)存储到后端使用的watch文件夹中。后端每隔几秒钟轮询一次该文件夹,拾取文件并执行其功能。 文件本身非常简单(即所有字符串数据,无嵌套),最大时约为1-2k,系统大部分时间都处于空闲状态(但在任何给定时间突发多达100条消息)。每个邮件的后端处理步骤大约需要10分钟。 当一个开发人员建议使用文件系统作为消息传递层是一个糟糕的解决方案时,这种说法就出现了,而应改为使用诸如关系数据库(MySQL),noSQL数据库(Redis)甚至是普通的REST API调用之类的东西。 应当注意,Redis用于组织中其他地方的队列消息处理。 我听到的论点如下 支持平面文件: 平面文件比任何其他解决方案都更可靠,因为仅在拾取后将文件从“监视”文件夹移至“处理”文件夹,完成后才移至“完成”文件夹。除非存在非常低级的错误,否则消息消失的风险为零,这无论如何都会破坏其他功能。 平面文件需要较少的技术知识来理解-就是cat这样。无需编写查询,也不会意外将消息从队列中弹出并永久消失。 从编程的角度来看,文件管理代码比数据库API更简单,因为它是每种语言的标准库的一部分。这降低了代码库的整体复杂性以及必须引入的第三方代码的数量。 在YAGNI原则规定,平面文件工作得很好,现在,没有表现出需要更换一个更复杂的解决方案,所以离开它。 支持数据库: 扩展数据库比充满文件的目录更容易 平面文件存在有人将“完成”文件复制回“监视”目录的风险。由于此应用程序(虚拟机管理)的性质,这可能会导致灾难性的数据丢失。 要求T / S应用程序具有更高的技术水平,这意味着未受过教育的员工不太可能仅仅通过戳东西来搞砸。 数据库连接代码,尤其是针对Redis之类的数据库连接代码,至少与标准库文件管理功能一样强大。 从开发人员的角度来看,数据库连接代码明显(如果没有功能)更简单,因为它的级别比文件操作更高。 从我的看到,两个开发人员都有很多有效的观点。 因此,在这两个人中,亲文件开发人员或亲数据库开发人员中,哪一个更符合软件工程最佳实践,为什么?

1
如何测试文件阅读器?
我正在一个具有几种文件格式的项目。某些格式由.xsds指定,其他格式由各自网站上的文档指定,而某些格式是自定义的内部格式,没有文档。姆哈哈哈哈哈 有什么问题? 我想测试我的文件阅读器,但是我不确定如何去做。应用程序的流程是这样的: file.___ ===> read by FileReader.java ===> which creates a Model object FileReader接口在哪里 public interface FileReader { public Model read(String filename); } 在Model拥有一批在读文件已填充属性。看起来像 public class Model { List<String> as; List<String> bs; boolean isAPain = true; // ... } 我尝试了什么? 我唯一的想法是为每种文件格式创建文件“生成器”。这些生成器基本上是生成器,它们接受一些变量(例如,要在文件中生成的注释数量),并输出一个样本文件,然后我将其读入并将结果Model与我最初用于生成文件的变量进行比较。 但是,这有一些问题: 它生成的文件看起来不像真实文件。生成器绝不了解上下文。 由于我是手动设置变量的生成器,因此很难识别生成器是否针对边缘情况生成了。这种方法仅比我创建十几个示例文件更好。 有没有更好的方法可以做到这一点? 编辑:将单元更改为集成,因为这实际上是我的意思。 EDIT2:这是我提到的边缘案例的示例。 每个文件代表一个由顶点和边组成的图形。这些顶点和边可以以不同的方式连接,因此: v1 …

7
是否有必要读取每个字节以检查复制的文件是否与原始文件相同?
我最近了解到一个名为Total Commander的程序。它是Windows资源管理器的替代品,具有自己的用于复制文件的内容。为了检查文件是否相同,它不计算CRC,而是逐字检查原始文件和副本上的每个字节。 我的问题是:这必要吗?CRC或任何其他此类技术会出错吗?作为程序员,您是否应该尝试实施这种完善而缓慢的系统,还是过于极端?

7
处理分隔文件的最佳方法
因此,通常CSV文件使用逗号和返回字符作为字段和行定界符。 这可能会导致同时包含这两个字符的文本出现明显问题。 显然那里有选择(转义),但是人们如何处理呢?使用不同的字符-管道还是tilda?逃脱他们?毕竟是2010年,现在不使用分隔文件了吗? 至少要努力寻找不出现问题的适当机会。 (请注意,这是出于好奇而不是更扎实的问题-这是我一次又一次地尝试处理数据的问题,总是绕过它,但通常感觉有点好,很脏,并想知道其他人的经历是什么)。

5
命名上传图像的最佳做法是什么?
假设我的Web应用程序中有一个表单,用户可以在其中上传个人资料图片。 我对文件大小,尺寸等几乎没有要求,但是当用户上传图像时,如何在系统上命名它们?我想它需要保持一致并且也是唯一的。 也许是GUID? a5c627bedc3c44b7ae7c06a44fb3fcf8.jpg 时间戳记? 129899740140465735.jpg 哈希?例如:md5 b1a9acaf295cf14ffbc5b6538294562c.jpg 有没有标准或推荐的方法来做到这一点?


1
为什么有人会使用multipart / form-data进行混合数据和文件传输?
我正在使用C#,正在编写的2个应用程序之间进行一些通信。我开始喜欢Web API和JSON。现在,我正在编写例程以在两个服务器之间发送包含一些文本数据和文件的记录。 根据互联网,我应该使用multipart / form-data请求,如下所示: SO问题“来自C#客户端的多部分表单” 基本上,您手动编写一个遵循如下格式的请求: Content-type: multipart/form-data, boundary=AaB03x --AaB03x content-disposition: form-data; name="field1" Joe Blow --AaB03x content-disposition: form-data; name="pics"; filename="file1.txt" Content-Type: text/plain ... contents of file1.txt ... --AaB03x-- 从RFC 1867复制-HTML中基于表单的文件上传 这种格式对于习惯于使用JSON数据的人来说非常令人不快。因此,很明显,解决方案是创建一个JSON请求,并对文件进行Base64编码,并最终得到如下请求: { "field1":"Joe Blow", "fileImage":"JVBERi0xLjUKJe..." } 我们可以在任何需要的地方使用JSON序列化和反序列化。最重要的是,发送此数据的代码非常简单。您只需为JSON序列化创建类,然后设置属性即可。文件字符串属性的设置很简单: using (FileStream fs = File.Open(file_path, FileMode.Open, FileAccess.Read, FileShare.Read)) { byte[] file_bytes = …

3
允许不同版本的软件之间的文件向后兼容的最佳设计是什么?
有什么好的设计可以允许文件类型在不同版本的软件之间向后兼容? 例如,Microsoft如何将Word 2007、2010和2013等信息获取到所有打开的docx文件,但是不同版本可以保存更多/更少的数据,并以略有不同的方式保存数据,所有数据都保存到相同的文件类型,并且保存在一个版本中的文件可以在另一个版本中打开,但是文件的某些元素可能在较早版本中不可用? 我的意思是,最明显的方法是 private string openfile(string filename) { File.Open(filename) ... some logic that gets a header from the file that will never change switch (fileversion) case 2007: ..... case 2010 ..... case 2013 ..... } 但这似乎是令人难以置信的整体,不是很可扩展,并且可能导致大量复制/粘贴代码。 因此,我正在考虑对所有版本使用基本接口,该接口定义文件中需要存在的不变结构(例如标头)和需要用于序列化/反序列化的方法,然后进行多次继承,以便每个实现该接口的新版本的类继承了旧版本,并且仅覆盖已更改的内容,因为该文件在大多数情况下都是相同的。 我并没有真正为文件的结构而烦恼,因为它已经决定我们将使用XML,并且基本上已经确定了初始模式。但是,毫无疑问,将来会对其进行更改,我只希望能够以一种易于适应这些更改的方式来设计代码。

3
在文件的开头写一些您仅在结尾知道的内容
背景:我正在编写微控制器C代码来编写EBML文件。EBML就像是带有嵌套元素的二进制XML,但是不是开始和结束标签,而是一个开始ID,长度和数据。我将其写入低功耗应用程序的外部Flash中,因此我希望将Flash的访问量降至最低。内存也很有限,因为没有一件事情容易。 当我可以将整个EBML元素保留在内存中时,生成它很容易,因为在知道长度之后,我可以返回并填写每个元素的长度。问题是当我无法将整个元素保存在内存中时该怎么办。我看到的选项是: 写出我所知道的内容,然后返回并添加长度(最简单,但是添加的闪存访问量比我想要的更多) 在开始编写每个元素之前,先计算它们的长度(相对容易,但是需要很多处理器时间) 一旦我的内存填满,就切换模式,这样我就可以继续浏览数据,但是仅是为了计算已经在内存中保留的元素的长度。然后写出内存中的内容,然后返回并继续从上次中断的地方处理数据。(到目前为止,我最喜欢的选项) 在需要编写元素且最终长度未知时,为它们提供最大或最坏情况的长度。(比上面更容易,但可能适得其反并浪费空间) 问题:看来这应该是人们思考过的相对普遍的问题。我知道在形成一些数据包时也会发生这种情况。我在这里缺少更好/更常见/更容易接受的技术吗?还是我可以搜索的一些术语?

3
从哪里加载和存储文件设置?
我认为这个问题应该适用于大多数从文件加载设置的程序。我的问题是从编程的角度来看的,实际上这是如何从不同的类和可访问性方面处理从文件中加载设置的问题。例如: 如果程序有一个简单的settings.ini文件,则应将其内容加载到load()类的方法还是构造函数中? 值应该存储在public static变量中,还是应该有static获取和设置属性的方法? 如果文件不存在或无法读取该怎么办?您将如何让程序的其余部分知道它无法获得那些属性? 等等 我希望在这里的正确位置提出这个问题。我想让问题尽可能与语言无关,但我主要关注的是具有继承性的语言,尤其是Java和C#.NET。

By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.