使用以下文件读取代码:
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来了解文件何时更改.
另请注意,在这种情况下,我不是在寻找在两个进程之间共享字符串的替代方法.
我想创建一个简单的程序(用Java编写)来编辑文本文件 - 特别是在文本文件中随机位置插入任意文本的文件.此功能是我目前正在编写的更大程序的一部分.
阅读有关java.util.RandomAccessFile的描述,似乎在文件中间执行的任何写操作实际上都会覆盖现有内容.这是一个副作用,我想避免(如果可能的话).
有没有一种简单的方法来实现这一目标?
提前致谢.
作为我正在进行的项目的一部分,我想清理一个我生成重复行条目的文件.然而,这些重复通常不会彼此靠近.我想出了一种在Java中这样做的方法(它基本上制作了文件的副本,然后使用嵌套的while语句将一个文件中的每一行与另一个文件中的其余部分进行比较).问题是,我生成的文件非常大而且文本很重(大约225k行文本,大约40兆).我估计我目前的流程需要63个小时!这绝对是不可接受的.
但是,我需要一个集成的解决方案.最好是Java.有任何想法吗?谢谢!
我有一个名为"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)
这段代码让我打开文件,没有标题.也无法弄清楚如何使用文件作为日志.
我试图在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) 我正在尝试读取文件夹中的所有文件,将它们存储在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 …
我有一个程序,我基本上根据已知的事情调整某些事情发生的概率.我的数据文件已经保存为Dictionary.txt中的pickle Dictionary对象.问题是,每次运行程序时它都会拉入Dictionary.txt,将其转换为字典对象,进行编辑并覆盖Dictionary.txt.这是相当大的内存密集型,因为Dictionary.txt是123 MB.当我转储我得到MemoryError时,当我把它拉进来时一切都很好..
是否有更好(更有效)的编辑方式?(也许不必每次都覆盖整个文件)
有没有办法可以调用垃圾收集(通过gc模块)?(我已经通过gc.enable()自动启用了它)
我知道除了readlines()之外你还可以逐行阅读.当我在程序中已经完全完成的Dictionary对象文件时,有没有办法逐行逐行编辑字典.
还有其他方法吗?
感谢您的时间.
如果文件已存在,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'存在,会发生什么?
所以我有一根插在手机上的小电缆,另一边有一个USB端口,你可以插入一个闪存盘,如你所见:

当我插入闪存驱动器时,我收到一条通知说:
USB大容量存储连接
当我启动文件资源管理器应用程序时,我可以看到驱动器位于:
/存储/ UsbDriveA /
这很好,但我想知道如何在我的代码中访问闪存驱动器.访问SD卡很容易:
File sdCard = Environment.getExternalStorageDirectory();
File directory = new File (sdCard.getAbsolutePath() + "/MyFiles")
directory.mkdirs();
Run Code Online (Sandbox Code Playgroud)
但是在闪存驱动器的情况下你会如何做到这一点?提前致谢!:)