文本文件读取与追加

木v知 2019-04-04 04:58:09
老铁们,现在问题咨询一下:

本地存在一个txt文本,我有两个进程在操作这个文本文件,一个不断往txt文本中追加内容,一个读取txt文本的内容上传到数据库,怎么能够保证不会上传到重复的数据呢?

我有个想法是,追加进程追加之前判断文本文件是否被占用,如果被占用就生成新的txt文本文件,读取进程读取之后删除以读取的文件。
...全文
723 11 打赏 收藏 转发到动态 举报
AI 作业
写回复
用AI写文章
11 条回复
切换为时间正序
请发表友善的回复…
发表回复
luj_1768 2019-04-09
  • 打赏
  • 举报
回复
数据库的操作速度远高于文本文件,一般情况下应该是:文本文件追加到一定阶段,插入一个标签,遇到标签再操作数据库;操作数据库时,文本文件可以继续增加。
木v知 2019-04-09
  • 打赏
  • 举报
回复
最后的解决方案:
1.写入的时候,判断文件是否被占用,若被占用,重新常见一个文件写入
2.读取的时候,获取文件夹下所有文件,根据时间进行倒叙排序,读取之后上传数据库删除文件。
木v知 2019-04-08
  • 打赏
  • 举报
回复
引用 3 楼 好奇都是要学的 的回复:
原来是排除啊, 我不是写了个代码效验吗? 用代码的
a=初始文本

if(a!=现在文本)
{
a=现在文本.替换(a,"");
把a插入数据库
}
这样能看懂吗?

恩,这里是一个文本替换的功能,有什么办法能够避免读取和写入并发的情况么?
港湾3 2019-04-08
  • 打赏
  • 举报
回复
请问各位大神mxy3.0有手机能操作的吗
angel6709 2019-04-08
  • 打赏
  • 举报
回复
很简单,坚持到换行才更新上一行到数据库。
  • 打赏
  • 举报
回复
引用 6 楼 木v知 的回复:
[quote=引用 3 楼 好奇都是要学的 的回复:] 原来是排除啊, 我不是写了个代码效验吗? 用代码的 a=初始文本 if(a!=现在文本) { a=现在文本.替换(a,""); 把a插入数据库 } 这样能看懂吗?
恩,这里是一个文本替换的功能,有什么办法能够避免读取和写入并发的情况么?[/quote] 数据库 自己就有并发处理, 你这样简单的需求 不用考虑的。 如果非得考虑 就加锁, 操作哪个表加锁, 让后面的排队
张天星 2019-04-06
  • 打赏
  • 举报
回复
一个不断往txt文本中追加内容,一个读取txt文本的内容上传到数据库,并且每次内容不重复(已经上传的不再重复上传) 这个需求么, 如果确保第一个线程是追加的话,那么第二个线程在另一个文件中,保留一个上传节点。 比如我已经上传到第三行了,这次判断txt,还是第三行就不管,超过第三行,就把后面的四五六行给上传了。 。。。 如果数据不怎么规律,之前的行数有可能被删除,那么就每行做一个标记,比如每一行的起始加个文字密码:ztx这样的,表示这一行已经上传了。 但不管怎么样,还是挺奇怪的,可以不保存文件么,只在内存中保留, 这样可以使用内存数据库,用一个跨线程的静态对象,DataTable来做中转,上传没上传的更容易记录,最简单就是,新增的数据没有ID,上传的数据有ID,就能确保不重复上传了。 如果一定要保存文件,也可以采用文件数据库来操作。Sqlite
秋的红果实 2019-04-04
  • 打赏
  • 举报
回复
奇怪的需求,要txt中转 必须的话,也应该用数据库吧,至少不用你管理两个线程 不要建立、删除文件,那是耗时操作 不重复,可以考虑使用内存数据库,或者说将已经上传的数据的主键,保存到内存,在写入前从内存找找是不是已经上传
  • 打赏
  • 举报
回复
原来是排除啊, 我不是写了个代码效验吗? 用代码的 a=初始文本 if(a!=现在文本) { a=现在文本.替换(a,""); 把a插入数据库 } 这样能看懂吗?
木v知 2019-04-04
  • 打赏
  • 举报
回复
引用 1 楼 好奇都是要学的 的回复:
上传一次 是一行吗?
TXT文件 最开始是 a 数据库 存入 a 文件改成了 ab 数据库 存的是 一行 ab 还是 二行 a 和 ab
如果始终是一行, 就不用管重复了, 一直update 全部 覆盖了

如果是第二种

都用 检测 SQL 检查下 改后的字符串 数据库有没有,

但是以上办法都不好

最好的办法是, 第二个进程
a=初始文本

if(a!=现在文本)
{
a=现在文本
操作数据库
}


上传一次是一行,第一次a记录 第二次a记录+b记录,但是我第一次已经把a记录上传了,第二次想要只上传B记录。每次数据库校验比较坑吧。

  • 打赏
  • 举报
回复
上传一次 是一行吗? TXT文件 最开始是 a 数据库 存入 a 文件改成了 ab 数据库 存的是 一行 ab 还是 二行 a 和 ab 如果始终是一行, 就不用管重复了, 一直update 全部 覆盖了 如果是第二种 都用 检测 SQL 检查下 改后的字符串 数据库有没有, 但是以上办法都不好 最好的办法是, 第二个进程 a=初始文本 if(a!=现在文本) { a=现在文本 操作数据库 }

111,096

社区成员

发帖
与我相关
我的任务
社区描述
.NET技术 C#
社区管理员
  • C#
  • AIGC Browser
  • by_封爱
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告

让您成为最强悍的C#开发者

试试用AI创作助手写篇文章吧