标签: file-io

在C#中,如果2个进程正在读取和写入同一个文件,那么避免进程锁定异常的最佳方法是什么?

使用以下文件读取代码:

using (FileStream fileStream = new FileStream(fileName, FileMode.Open, FileAccess.Read, FileShare.None))
{
    using (TextReader tr = new StreamReader(fileStream))
    {
        string fileContents = tr.ReadToEnd();
    }
}
Run Code Online (Sandbox Code Playgroud)

并且以下文件编写代码:

using (TextWriter tw = new StreamWriter(fileName))
{
    tw.Write(fileContents);
    tw.Close();
}
Run Code Online (Sandbox Code Playgroud)

可以看到以下异常详细信息:

该进程无法访问文件'c:\ temp\myfile.txt',因为它正由另一个进程使用.

避免这种情况的最佳方法是什么?读者是否需要在收到例外后重试,还是有更好的方法?

请注意,阅读器进程使用FileSystemWatcher来了解文件何时更改.

另请注意,在这种情况下,我不是在寻找在两个进程之间共享字符串的替代方法.

c# file-io distributed

25
推荐指数
2
解决办法
4万
查看次数

通过Java将文本插入现有文件

我想创建一个简单的程序(用Java编写)来编辑文本文件 - 特别是在文本文件中随机位置插入任意文本的文件.此功能是我目前正在编写的更大程序的一部分.

阅读有关java.util.RandomAccessFile的描述,似乎在文件中间执行的任何写操作实际上都会覆盖现有内容.这是一个副作用,我想避免(如果可能的话).

有没有一种简单的方法来实现这一目标?

提前致谢.

java filesystems file-io file

25
推荐指数
2
解决办法
7万
查看次数

使用Java删除文件中的重复行

作为我正在进行的项目的一部分,我想清理一个我生成重复行条目的文件.然而,这些重复通常不会彼此靠近.我想出了一种在Java中这样做的方法(它基本上制作了文件的副本,然后使用嵌套的while语句将一个文件中的每一行与另一个文件中的其余部分进行比较).问题是,我生成的文件非常大而且文本很重(大约225k行文本,大约40兆).我估计我目前的流程需要63个小时!这绝对是不可接受的.

但是,我需要一个集成的解决方案.最好是Java.有任何想法吗?谢谢!

java file-io text file duplicates

25
推荐指数
3
解决办法
4万
查看次数

25
推荐指数
5
解决办法
7万
查看次数

如何在Python中从数据库创建CSV文件?

我有一个名为"clients"的Sqlite 3和/或MySQL表.

使用python 2.6,如何使用标题创建名为Clients100914.csv的csv文件?excel方言...

Sql执行:select*只提供表数据,但我希望完整的表包含标题.

如何创建记录集以获取表头.表头应该直接来自不是用python编写的sql.

w = csv.writer(open(Fn,'wb'),dialect='excel')
#w.writelines("header_row")
#Fetch into sqld
w.writerows(sqld)
Run Code Online (Sandbox Code Playgroud)

这段代码让我打开文件,没有标题.也无法弄清楚如何使用文件作为日志.

python mysql csv sqlite file-io

25
推荐指数
3
解决办法
6万
查看次数

在Windows上检查Java中文件是否为空的最有效方法

我试图在Windows上用Java检查日志文件是否为空(意味着没有错误).到目前为止,我尝试过使用2种方法.

方法1(失败)

FileInputStream fis = new FileInputStream(new File(sLogFilename));  
int iByteCount = fis.read();  
if (iByteCount == -1)  
    System.out.println("NO ERRORS!");
else
    System.out.println("SOME ERRORS!");
Run Code Online (Sandbox Code Playgroud)

方法2(失败)

File logFile = new File(sLogFilename);
if(logFile.length() == 0)
    System.out.println("NO ERRORS!");
else
    System.out.println("SOME ERRORS!");
Run Code Online (Sandbox Code Playgroud)

现在,当日志文件为空(没有内容)时,这些方法都会失败,但文件大小不为零(2个字节).

检查文件是否为空的最有效最准确的方法是什么?我要求效率,因为我必须循环检查文件大小数千次.

注意:文件大小只会徘徊在几到10 KB左右!

方法3(失败)

按照@ Cygnusx1的建议,我也试过使用FileReader过,但没有成功.这是片段,如果有人感兴趣的话.

Reader reader = new FileReader(sLogFilename);
int readSize = reader.read();
if (readSize == -1)
    System.out.println("NO ERRORS!");
else
    System.out.println("SOME ERRORS!");
Run Code Online (Sandbox Code Playgroud)

java filesystems file-io logging file

25
推荐指数
2
解决办法
10万
查看次数

将整个文件读取到QString

我正在尝试读取文件夹中的所有文件,将它们存储在fileListvia中entryList(),然后,对于该文件夹中的每个文件,打开它并将其内容读入QString.我认为这应该很容易,但我无法弄清楚我做错了什么.我现在得到的错误是:

no matching function for call to 'QTextStream::QTextStream(QFile*, QIODevice::OpenModeFlag)'

据我所知,这涉及到错误的办法,我声明QTextStream,但事情是那个例子,我发现似乎DO这一点,所以,我为什么不能?

另外,我注意到如果我添加测试以检查文件打开是否成功,我会收到一条警告,说"访问被拒绝",即使我只是在阅读.虽然,我可以读取该文件夹的内容,甚至可以填充QListWidget这些文件没有问题.

事实上这些是*.JSON文件应该无关紧要,对吧?

我已经看过这个,这个这个例子,但是无法弄清楚我做错了什么.任何帮助表示赞赏.

这是我的代码:

foreach(QString fileName, fileList){

    QFile file(fileName);
    file.open(QIODevice::ReadOnly);
    QString s;

    QTextStream s1(&file, QIODevice::ReadOnly);
    s.append(s1.readAll());

    qDebug() << "string content:" << s; // empty!!!

}
Run Code Online (Sandbox Code Playgroud)

更新 通过cmannett85建议的修改,我不再得到错误,但由于某种原因,字符串s最后仍然是空的.关于文件夹中的读/写权限,我现在已经注意到,如果我测试

if(!file.open(QIODevice::ReadWrite))
        {
            QMessageBox::information(0,"error",file.errorString());
        }
Run Code Online (Sandbox Code Playgroud)

我得到两个警告 - 我怀疑是由- ...- 当我运行循环时.在它产生32个警告之前,我在文件夹中有30个文件.无论如何,我试图读取的文件是*.JSON,根据Windows 7中的属性对话框,它们不能设置为只读隐藏.我可以使用相同的程序在完全相同的文件夹中写入文件.

有一件事我想知道是否可能是这个原因:文件名包含.在扩展名之前,即ID.file.16.json …

file-io qt

25
推荐指数
2
解决办法
5万
查看次数

Pickle转储巨大的文件没有内存错误

我有一个程序,我基本上根据已知的事情调整某些事情发生的概率.我的数据文件已经保存为Dictionary.txt中的pickle Dictionary对象.问题是,每次运行程序时它都会拉入Dictionary.txt,将其转换为字典对象,进行编辑并覆盖Dictionary.txt.这是相当大的内存密集型,因为Dictionary.txt是123 MB.当我转储我得到MemoryError时,当我把它拉进来时一切都很好..

  • 是否有更好(更有效)的编辑方式?(也许不必每次都覆盖整个文件)

  • 有没有办法可以调用垃圾收集(通过gc模块)?(我已经通过gc.enable()自动启用了它)

  • 我知道除了readlines()之外你还可以逐行阅读.当我在程序中已经完全完成的Dictionary对象文件时,有没有办法逐行逐行编辑字典.

  • 还有其他方法吗?

感谢您的时间.

python memory file-io pickle

25
推荐指数
4
解决办法
4万
查看次数

node js:fs.rename覆盖文件(如果已存在)

如果文件已存在,fs.rename是否会覆盖该文件?

var fs = require('fs'),
    oldPath = 'firstfile.txt',
    newPath = 'temp/firstfile.txt';

fs.rename(oldPath, newPath, function (err) {
    console.log('rename callback ', err); 
});
Run Code Online (Sandbox Code Playgroud)

如果'/newFolder/somefile.txt'存在,会发生什么?

file-io node.js

25
推荐指数
2
解决办法
2万
查看次数

访问android中的USB大容量存储设备

所以我有一根插在手机上的小电缆,另一边有一个USB端口,你可以插入一个闪存盘,如你所见:

在此输入图像描述

当我插入闪存驱动器时,我收到一条通知说:

USB大容量存储连接

当我启动文件资源管理器应用程序时,我可以看到驱动器位于:

/存储/ UsbDriveA /

这很好,但我想知道如何在我的代码中访问闪存驱动器.访问SD卡很容易:

File sdCard = Environment.getExternalStorageDirectory();
File directory = new File (sdCard.getAbsolutePath() + "/MyFiles")
directory.mkdirs();
Run Code Online (Sandbox Code Playgroud)

但是在闪存驱动器的情况下你会如何做到这一点?提前致谢!:)

java file-io android file

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