在环顾四周的时候,我发现了很多关于如何计算出文件中行数的讨论.
例如这三个:
c#我 如何计算
文本文件中的行数确定文本文件中的行数
如何快速计算行数?
那么,我继续前进并最终使用了我能找到的最有效(至少是内存方式?)方法:
private static int countFileLines(string filePath)
{
using (StreamReader r = new StreamReader(filePath))
{
int i = 0;
while (r.ReadLine() != null)
{
i++;
}
return i;
}
}
Run Code Online (Sandbox Code Playgroud)
但是,当文件中的行本身非常长时,这将永远存在.真的没有更快的解决方案吗?
我一直试图使用StreamReader.Read()
或者StreamReader.Peek()
我不能(或者不知道如何)让它们中的任何一个一旦有'东西'(字符?文本?)就移动到下一行.
有什么想法吗?
结论/结果(根据提供的答案进行一些测试后):
我在两个不同的文件中测试了下面的5种方法,我得到了一致的结果,似乎表明普通的旧StreamReader.ReadLine()
方法仍然是最快的方法之一......说实话,我对答案中的所有评论和讨论感到困惑.
文件#1:
大小:3,631 KB
行:56,870
文件#1的结果以秒为单位:
0.02 - > ReadLine方法.
0.04 - >读取方法.
0.29 - > ReadByte方法.
0.25 - > Readlines.Count方法.
0.04 - > ReadWithBufferSize方法.
文件#2:
大小
:14,499 KB 行:213,424
文件#1的结果以秒为单位:
0.08 - > …
是否可以在不使用C#的情况下获取文件的大小System.IO.FileInfo
?
我知道你可以分别使用Path.GetFileName(yourFilePath)
和得到其他东西,比如Name和Extension Path.GetExtension(yourFilePath)
,但显然不是文件大小?有没有其他方法我可以获得文件大小而不使用System.IO.FileInfo
?
唯一的原因是,如果我是正确的,FileInfo会抓取比我真正需要的更多的信息,因此如果我需要的唯一东西是文件的大小,那么收集所有这些FileInfo需要更长的时间.有更快的方法吗?
我解决了大部分问题.我可以遍历工作表,我可以创建文本文件并写入它.我遇到的唯一问题实际上是从每张表中提取文本或值.下面是我的代码,但它只会为每个工作表抛出一个对象,并将这些单词写入我的文本文件而不是实际值.
System.Object[,]
System.Object[,]
Run Code Online (Sandbox Code Playgroud)
我还缺少什么?我应该指出我是一名初学程序员.
这是我到目前为止的代码:
using (StreamWriter sw = File.CreateText("ExtractedText.txt"))
{
Excel.Application xlApp = new Excel.Application();
Excel.Workbook thisWkBook = xlApp.Workbooks.Open(thisFile);
foreach (Excel.Worksheet sheet in thisWkBook.Worksheets)
{
sw.WriteLine(sheet.UsedRange.Value);
}
}
Run Code Online (Sandbox Code Playgroud)
有任何想法吗?谢谢!
我有一个表格,其中包含NTEXT类型的字段,它存储了许多类型的值,其中包含文件大小.我正在尝试在记录列表上运行查询并添加文件大小,但我遇到了这个令人困惑的问题.
由于NTEXT不能直接/隐式转换为INT或BIGINT,我首先将其转换为VARCHAR然后我尝试将其转换为INT或BIGINT.一切顺利,直到我尝试将VARCHAR值转换为INT或BIGINT.
以下是我的查询和结果:
首先,我尝试以下操作,显示没有问题,输出为61069(值仍为ntext类型).
SELECT FileSize
FROM dbo.myTable
WHERE ID = 111
Run Code Online (Sandbox Code Playgroud)
现在我将其转换/转换为varchar,再次,没问题.输出是61069(现在是varchar类型).
SELECT CONVERT(VARCHAR, FileSize)
FROM dbo.myTable
WHERE ID = 111
Run Code Online (Sandbox Code Playgroud)
最后,我尝试将VARCHAR值转换为BIGINT,以便我可以执行我的SUM()和其他计算,但这次我得到一个" 将数据类型varchar转换为bigint错误. "消息.
SELECT CONVERT(BIGINT, CONVERT(VARCHAR, FileSize))
FROM dbo.myTable
WHERE ID = 111
Run Code Online (Sandbox Code Playgroud)
如果我尝试将其转换为INT,我会收到" 转换varchar值'7/1/2008 3:39:30 AM'转换为数据类型int "
SELECT CONVERT(INT, CONVERT(VARCHAR, FileSize))
FROM dbo.myTable
WHERE ID = 111
Run Code Online (Sandbox Code Playgroud)
我完全迷失了,任何可能导致这种情况的想法?