C语言中如何截断文件?

2023-12-21

我正在使用 C 将一些数据写入文件。我想删除文件中以前写入的文本,以防它比我现在写的长。 我想减小文件的大小或截断直到最后。我怎样才能做到这一点?


如果您想将文件的先前内容保留到一定长度(大于零的长度,其他答案提供了),则 POSIX 提供truncate() http://pubs.opengroup.org/onlinepubs/9699919799/functions/truncate.html and ftruncate() http://pubs.opengroup.org/onlinepubs/9699919799/functions/ftruncate.html工作的职能。

#include <unistd.h>
int ftruncate(int fildes, off_t length);
int truncate(const char *path, off_t length);

该名称表明了主要目的 - 缩短文件。但是,如果指定的长度比先前的长度长,则文件将增长(零填充)到新的大小。注意ftruncate()适用于文件描述符,而不是FILE *;你可以使用:

if (ftruncate(fileno(fp), new_length) != 0) ...error handling...

但是,您应该注意混合文件流(FILE *)和文件描述符(int)访问单个文件很容易导致混乱——请参阅某些问题的评论。这应该是最后的手段。

不过,出于您的目的,打开时截断可能就是您所需要的,为此,其他人提供的选项就足够了。


对于 Windows,有一个函数SetEndOfFile() https://msdn.microsoft.com/en-us/library/windows/desktop/aa365531(v=vs.85).aspx和一个相关的函数SetFileValidData() https://msdn.microsoft.com/en-us/library/windows/desktop/aa365544(v=vs.85).aspx可以完成类似工作但使用不同接口的函数。基本上,您寻找要设置文件结尾的位置,然后调用该函数。

还有一个功能_chsize()如记录在answer https://stackoverflow.com/a/874704/15168 by sofr https://stackoverflow.com/users/103521/sofr.

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

C语言中如何截断文件? 的相关文章

  • 尚未注册类型“IServiceProviderFactory[Autofac.ContainerBuilder]”的服务

    当运行以下命令添加数据库迁移脚本时 出现以下错误 dotnet ef migrations add InitialCreate v o Migrations context MyContext 访问 Microsoft Extensions
  • 使用 mono/nunit-console/4 在 Mac OS X 控制台上运行测试

    我安装了 Max OS X 10 11 1 上面装有 Xamarin 我编写了简单的测试类 只是为了测试在 Mac OS X 和 Ubuntu 上运行 Nunit 测试 该类实际上有一个返回字符串的方法 using System names
  • 我如何理解这个 C 类型声明?

    double bar int double double double double 在查看讲座幻灯片时 我发现了留给学生的练习 用简单的英语来说 什么是类型bar在这个 C 声明中 Please帮助我解决这个问题 我什至不知道从哪里开始
  • 何时使用 =default 使析构函数默认?

    尽管对构造函数使用 default 对我来说很清楚 即强制编译器在其他构造函数存在时创建默认构造函数 但我仍然无法理解这两种类型的析构函数之间的区别 那些使用 default 的 那些没有显式定义并由编译器自动生成的 我唯一想到的是 gro
  • 根据 N 个值中最小的一个返回不同的结果

    不确定如何使标题更具描述性 所以我只是从一个例子开始 我使用下面的代码位 它从枚举中选择一个方向 具体取决于四个轴中哪一个与给定方向相比形成最小角度 static Direction VectorToDirection Vector2 di
  • GCC 和 ld 找不到导出的符号...但它们在那里

    我有一个 C 库和一个 C 应用程序 尝试使用从该库导出的函数和类 该库构建良好 应用程序可以编译 但无法链接 我得到的错误遵循以下形式 app source file cpp text 0x2fdb 对 lib namespace Get
  • 如何在 C# 控制台应用程序中将修饰符(ctrl、alt、shift)按键捕获为单个按键?

    Console ReadKey 仅在按下 正常 键时捕获输入 然后将修饰符 如果有 附加为键信息的一部分 如何将单个修饰键注册为输入 提供了一种解决方案这个链接 https blogs msdn microsoft com toub 200
  • 时间:2019-03-17 标签:c#ThreadSafeDeepCopy

    我一直在阅读很多其他问题以及大量谷歌搜索 但我一直无法找到明确的解决方案 根据我读过的一些最佳实践 类的静态方法应该创建线程安全的 并且实例成员应该将线程安全留给消费者 我想为该类实现深度复制方法 该类本身还有其他引用类型成员 有没有什么方
  • 如何在 QTabWidget Qt 中展开选项卡

    我有一个QTabWidget像这个 但我想展开选项卡以 填充 整个小部件宽度 如下所示 我怎样才能做到这一点 我在用Qt 5 3 2 and Qt 创建者 3 2 1 Update 我尝试使用setExpanding功能 ui gt myT
  • 在 JSQMessagesViewController 中显示 LocationMediaItem

    我刚刚尝试实施LocationMediaItem in my Xamarin iOS应用程序使用JSQMessagesViewController 一切都很顺利 唯一的问题是UICollectionView应该显示位置的单元格永远停留在加载
  • std::forward_as_tuple 将参数传递给 2 个构造函数

    我想传递多个参数以便在函数内构造两个对象 以同样的方式std pair
  • 检查 RoutedEvent 是否有任何处理程序

    我有一个自定义 Button 类 当单击它时 打开特定窗口 它总是执行相同的操作 我添加了一个可以在按钮的 XAML 中分配的 Click 事件 就像常规按钮一样 当它被单击时 我想执行 Click 事件处理程序 如果已分配 否则我想执行默
  • AES 输出是否小于输入?

    我想加密一个字符串并将其嵌入到 URL 中 因此我想确保加密的输出不大于输入 AES 是可行的方法吗 不可能创建任何始终会创建比输入更小的输出的算法 但可以将任何输出反转回输入 如果您允许 不大于输入 那么基本上您只是在谈论同构算法alwa
  • 如何分析组合的 python 和 c 代码

    我有一个由多个 python 脚本组成的应用程序 其中一些脚本正在调用 C 代码 该应用程序现在的运行速度比以前慢得多 因此我想对其进行分析以查看问题所在 是否有工具 软件包或只是一种分析此类应用程序的方法 有一个工具可以将 python
  • 如何在c的case语句中使用省略号?

    CASE expr no commas ELLIPSIS expr no commas 我在c的语法规则中看到了这样的规则 但是当我尝试重现它时 int test float i switch i case 1 3 printf hi 它失
  • 新任务中使用的依赖注入服务

    我在需要时使用依赖项注入来访问我的服务 但我现在想要创建一个并发任务 但这会由于依赖项注入对象及其生命周期而导致问题 我读过这篇文章 标题 防止多线程 Link http mehdi me ambient dbcontext in ef6
  • 跨多个域的 ASP.NET 会话

    是否有合适的 NET 解决方案来在多个域上提供持久服务器会话 即 如果该网站的用户在 www site1 com 下登录 他们也将在 www site2 com 下登录 安全是我们正在开发的程序的一个问题 Thanks 它是否需要在会话中
  • 如何在 DropDownList 中保留空格 - ASP.net MVC Razor 视图

    我在视图中通过以下方式绑定我的模型 问题是我的项目文本是格式化文本 单词之间有空格 如下所示 123 First 234 00 123 AnotherItem 234 00 123 Second 234 00 我想保留此项目文本中的空格 即
  • 矩阵到数组 C#

    这将是转换方阵的最有效方法 例如 1 2 3 4 5 6 7 8 9 into 1 2 3 4 5 6 7 8 9 in c 我在做 int array2D new int 1 2 3 4 5 6 7 8 9 int array1D new
  • 使用 QtWebEngine 将 C++ 对象暴露给 Qt 中的 Javascript

    使用 QtWebkit 可以通过以下方式将 C 对象公开给 JavascriptQWebFrame addToJavaScriptWindowObject如中所述https stackoverflow com a 20685002 5959

随机推荐

  • 如何将自动布局与容器转换结合使用?

    如何将自动布局与 UIViewController 容器转换方法一起使用 void transitionFromViewController UIViewController fromViewController toViewControl
  • 将一个数据系列绘制在另一个数据系列下方

    当您在 Matlab 中绘制图形时 最近绘制的数据系列会放置在已有数据之上 例如 figure hold on plot sin linspace 0 pi linewidth 4 color 0 0 1 plot cos linspace
  • Android Firebase 应用程序分发 - 服务凭证文件不存在。请检查服务凭证路径并重试

    我正在尝试从 Crashlytics Beta 迁移到 Firebase App Distribution 中间的 CircleCi CircleCi 中的构建失败并出现以下错误 什么地方出了错 任务 FiverrApp appDistri
  • Odoo 销售点 + 邮箱:如何修改收据

    我需要修改销售点收据 在 Odoo 销售点中 有两个打印收据的模板 XmlReceipt 和 PostTicket 当我使用 Posbox 时 我想我必须修改 XmlReceipt 请问有没有办法继承原来的模板 我找到了有关如何使用 Pos
  • 没有错误:无法在谷歌云存储上查看上传的文件

    使用云函数在云函数上运行 python 代码云函数 python https github com MartinSahlen cloud functions python 我正在云上处理图像 现在我想将该图像保存在google cloud
  • 使用 TStringList 的奇怪 EOutOfMemory 异常

    我有一个系统 它加载一些压缩到 log 文件中的文本文件 然后使用多个线程解析为信息类 每个线程处理不同的文件并将解析的对象添加到列表中 该文件是使用 TStringList 加载的 因为它是我测试过的最快的方法 文本文件的数量是可变的 但
  • 在 Python 中迭代模块

    所以我有一个嵌套文件夹 其中有执行某些操作的模块 注意 它们不是类 只是脚本 我想迭代这些模块 我现在拥有的 from scripts module 1 import train module 1 from scripts module 2
  • CouchDB Views - 列出函数性能影响?

    你们中的许多人都知道 couchdb 视图的响应如下 rows key 1 value Col1 Some Value key 2 value Col1 Another Value 好吧 我想将其整理为 key 1 value Col1 S
  • 如何更改作为参数传递给函数的变量?

    我试图通过使用返回 void 的函数来更改结构内的一些变量 该函数采用 Struct 成员作为参数 结构数组和大小 该函数有一些代码 最终会更改结构成员内的一些变量 但是 我知道当您将某些内容作为参数传递给函数时 您正在使用副本而不是原始文
  • 在 PHP 中通过 SSH 连接到 MySQL 服务器

    我想通过 ssh 建立一个到我的 mysql 服务器的 ssh 隧道 理想情况下 我会返回一个 mysqli db 指针 就像我直接连接一样 我所在的共享主机没有SSH2 http ca php net ssh2库 但我也许可以使用 PEC
  • 我能知道 BufferedImage 最初的文件类型是什么吗?

    在我的代码中 我有一个缓冲图像 http docs oracle com javase 7 docs api java awt image BufferedImage html那是装载有ImageIO http docs oracle co
  • qtextedit - 调整大小以适合

    我有一个QText编辑 https doc qt io qt 5 QTextEdit html充当 显示者 可编辑为 false 它显示的文本是自动换行的 现在我确实希望设置此文本框的高度 以便文本完全适合 同时也遵守最大高度 基本上 布局
  • docker-compose - 我可以在不重新启动容器的情况下更新 traefik 标签吗?

    我可以使用 docker compose 更新容器上的标签而不重新启动容器吗 理想场景 更改 docker compose yml 中的标签 保存 docker compose yml 运行命令来更新标签 无需重新启动容器 一般来说 更改容
  • Numpy:如何按列堆叠数组?

    假设我有 n 个相同长度的 numpy 数组 我现在想创建一个 numpy 矩阵 使得矩阵的每一列都是 numpy 数组之一 我怎样才能实现这个目标 现在我正在循环中执行此操作 但会产生错误的结果 注意 我必须能够迭代地将它们一一堆叠在一起
  • 从 void ** 到 char ** 的转换有多危险

    所以我们知道标准并不强制指针大小相等 here https stackoverflow com questions 1241205 are all data pointers of the same size in one platform
  • jQuery:如何获取表单提交时单击了哪个按钮?

    我有一个 submit 为表单提交设置的事件 我的页面上还有多个表单 但本示例仅提供一个表单 我想知道在没有应用的情况下单击了哪个提交按钮 click 事件对每个人来说 这是设置
  • HTTP 请求标头

    好的 我一直在使用原始 HTTP 请求 发现我可以将原始 HTTP 响应发布到 NSLog 中 并且我几乎已经将原始 HTTP 请求破解到 NSLog 中 我现在有点卡住了 代码示例 NSString CurrentWebURL webVi
  • 日历中的重复事件 - Rails

    我正在寻找对重复事件进行建模的最佳方法 我正在使用 fullcalendar 来显示事件 但我认为重复事件最好在 Rails 后端处理 我已经查看了其他问题和现有示例代码 但没有找到任何合适的内容 它的行为应该类似于谷歌日历 所以应该可以删
  • 如何通过新的 RTTI 设置事件处理程序? [D2010]

    在使用新的 RTTI 模块时 我找不到使用新实用程序设置事件处理程序的方法 尝试这样的事情 LProp TRttiContext Create GetType Form1 ClassInfo AsInstance GetProperty O
  • C语言中如何截断文件?

    我正在使用 C 将一些数据写入文件 我想删除文件中以前写入的文本 以防它比我现在写的长 我想减小文件的大小或截断直到最后 我怎样才能做到这一点 如果您想将文件的先前内容保留到一定长度 大于零的长度 其他答案提供了 则 POSIX 提供tru