我试图列出文件夹中某种类型的所有文件,以便我可以遍历它们.这当然应该很简单,但我无法理解.我找到了一些使用dirent.h的例子,但是我需要用直接的c ++来做.
最好的方法是什么?
谢谢.
我正在尝试读取大小为114,808字节的二进制文件.我为文件分配内存,然后尝试使用fopen和读取文件fread.第一次fread被调用时,它总是以274个字节读取,并且后续调用feof始终返回1,即使显然没有到达文件的末尾.为什么是这样?
根据MSDN文档为feof,"该FEOF函数返回非零值,如果读取操作已试图读到文件的结束;否则它返回0".所以我不明白是什么导致feof一直回归1.
这是我到目前为止的代码.任何帮助将非常感激.谢谢!
// Open source file with read-only access
if ( iError == ERROR_SUCCESS )
{
#ifdef _MSC_VER
#pragma warning(disable : 4996)
#endif
pFile = fopen( pSrcPath, "r" );
if ( pFile == NULL )
{
iError = ERROR_FILE_NOT_FOUND;
}
}
// Read in source file to memory
if ( iError == ERROR_SUCCESS )
{
do
{
// Buffer pointer passed to fread …Run Code Online (Sandbox Code Playgroud) 作为正常工作流程的一部分,我收到一组文本文件,每个文件包含一个标题行.对于我来说,将它们作为单个文件使用会更方便,但如果我cat这些天真的话,首先导致文件中的标题行会导致问题.
这些文件往往足够大(10 3 -10 5行,5-50 MB),并且数量足够大,以至于在编辑器中或逐步执行此操作很尴尬和/或繁琐,例如:
$ wc -l *
20251 1.csv
124520 2.csv
31158 3.csv
175929 total
$ tail -n 20250 1.csv > 1.tmp
$ tail -n 124519 2.csv > 2.tmp
$ tail -n 31157 3.csv > 3.tmp
$ cat *.tmp > combined.csv
$ wc -l combined.csv
175926 combined.csv
Run Code Online (Sandbox Code Playgroud)
看起来这应该在一行中可行.我已经分离出了我需要的论点,但是我很难弄清楚如何匹配它们tail并从总线中减去1(我不习惯awk):
$ wc -l * | grep -v "total" | xargs -n 2
20251 foo.csv
124520 bar.csv
31158 baz.csv
87457 zappa.csv
7310 bingo.csv …Run Code Online (Sandbox Code Playgroud) 我有一个具有以下文件夹结构的USB驱动器
<root of USB>
-- folder1
-- folder1a
-- file1ai
-- file1aii
-- file1aiii
-- folder1b
-- ...
-- ...
-- folder2
-- folder2a
-- folder2b
-- ...
-- folder3
-- folder3a
-- folder3b
-- ...
Run Code Online (Sandbox Code Playgroud)
以编程方式我需要重新排列USB驱动器上的文件夹,如下所示
<root of USB>
-- new folder
-- folder1a
-- folder1b
-- ...
-- folder2
-- folder2a
-- folder2b
-- ...
-- folder3
-- folder3a
-- folder3b
-- ...
Run Code Online (Sandbox Code Playgroud)
这里的代码示例工作得很好https://msdn.microsoft.com/en-us/library/bb762914%28v=vs.110%29.aspx但是当涉及大量文件夹时它超级慢,例如当folder1时有1000个子文件夹(folder1a,folder1b等),folder1的总大小约为4MB(磁盘上大约12MB) - 这些大小是不变的.所有文件夹的复制操作总共需要25分钟.有没有办法加快这个操作?我希望有一些超级聪明的方法来重命名文件夹/操纵分配表/无论如何使这种情况发生.
笔记:
这是我在网上找到的一个Java示例:
try{
//use buffering
InputStream file = new FileInputStream("quarks.ser");
InputStream buffer = new BufferedInputStream(file);
ObjectInput input = new ObjectInputStream (buffer);
try{
//deserialize the List
List<String> recoveredQuarks = (List<String>)input.readObject();
//display its data
for(String quark: recoveredQuarks){
System.out.println("Recovered Quark: " + quark);
}
}
finally{
input.close();
}
} catch(ClassNotFoundException ex){
//some exception handling
}
Run Code Online (Sandbox Code Playgroud)
在上面,使用try-finally块在关闭输入之前使用输入执行某些处理有什么好处?换句话说,上面的代码对这样的东西有什么好处:
try{
//use buffering
InputStream file = new FileInputStream("quarks.ser");
InputStream buffer = new BufferedInputStream(file);
ObjectInput input = new ObjectInputStream (buffer);
List<String> recoveredQuarks = (List<String>)input.readObject();
for(String quark: recoveredQuarks){
System.out.println("Recovered Quark: …Run Code Online (Sandbox Code Playgroud) 我正在尝试使用fgets和sscanf读取多行不同长度的顶点.
(1,6),(2,6),(2,9),(1,9)
(1,5)
Run Code Online (Sandbox Code Playgroud)
我的程序进入第一个顶点内的无限循环.
char temp3[255];
while(fgets(temp3, 255, fp)!= NULL){
printf("Polygon %d: ", polycount);
while(sscanf(temp3, "(%d,%d)", &polygonx[polycount][vertcount], &polygony[polycount][vertcount]) != EOF){
sscanf(temp3, ",");
printf("(%d,%d),",polygonx[polycount][vertcount], polygony[polycount][vertcount]);
vertcount++;
}
vertcounts[polycount] = vertcount;
vertcount = 0;
polycount++;
}
Run Code Online (Sandbox Code Playgroud)
我必须能够将顶点的x和y值提供给多边形数组,所以我坚持使用sscanf.我也遇到了问题,因为我无法在互联网上找到每行扫描不同数量元素的内容.
该程序接受一个文件,并且应该将文件内容传输到结构
该文件的内容是:
11.0, 11.0, 11.0, 14.0
22.4, 22.4, 22.4, 28.9
12.7, 13.8, 14.6, 14.5
23.5, 13.5, 42.5, 21.8
18.0, 16.0, 21.0, 42.9
21.0, 21.0, 21.0, 100.0
Run Code Online (Sandbox Code Playgroud)
该文件的输出是:
22.4, 22.4, 22.4, 28.9
23.5, 13.5, 42.5, 21.8
21.0, 21.0, 21.0, 100.0
Run Code Online (Sandbox Code Playgroud)
它正在从文件的内容中跳过每隔一行,我不知道如何解决这个问题.
#include <stdio.h>
#define MAX_ITEMS 100
struct item {
double item1;
double item2;
double item3;
double item4;
};
int main(void)
{
struct item myItems[MAX_ITEMS];
int i = 0;
FILE *input;
input = fopen("items.txt", "r");
if(input == NULL) {
printf("Error opening file\n"); …Run Code Online (Sandbox Code Playgroud) 有人可以解释为什么循环检查条件是否不同于-1?
while ((c = in.read()) != -1) {
out.write(c);
}
Run Code Online (Sandbox Code Playgroud) 我有这个程序用于从文件中读取数据:
void baca(int *n)
{
FILE *f = fopen("namafile.txt", "r");
if (f)
{
while (fscanf(f, "%[^|]|%d|%[^\n]\n", mhs[*n].nama, &mhs[*n].umur, mhs[*n].hp)==3)
{
(*n)++;
}
}
fclose(f);
}
Run Code Online (Sandbox Code Playgroud)
如果我像这样在文件中写入数据,那么程序会正确读取它:
nko|20|9999
hotma|21|9982882
andi|30|212313
Run Code Online (Sandbox Code Playgroud)
但是,当我添加这样的空格时,不知何故它无法正确读取:
nko | 20 | 9999
hotma | 21 | 9982882
andi | 30 | 212313
Run Code Online (Sandbox Code Playgroud)
有人能给我一些暗示我应该做什么吗?
当我运行程序时,最小的数字总是为0.这是为什么?最大和平均值似乎是正确的.
问题最可能在于我如何使用随机类.
import java.io.*;
import java.util.*;
import java.util.Arrays;
public class ReadAndWrite {
public static void main(String[] args) {
Random ran = new Random();
int i_data = 0;
int[] sort = new int[100];
File file = new File("Test4");
int total = 0;
int average = 0;
try {
file.createNewFile();
}
catch(Exception e) {
System.out.println("Could not create the file for some reason. Try again.");
System.exit(0);
}
try {
FileOutputStream fos = new FileOutputStream("Test4");
ObjectOutputStream oos = new ObjectOutputStream(fos);
for(int i …Run Code Online (Sandbox Code Playgroud)