标签: file-io

C++查找文件夹中所有类型的文件?

我试图列出文件夹中某种类型的所有文件,以便我可以遍历它们.这当然应该很简单,但我无法理解.我找到了一些使用dirent.h的例子,但是我需要用直接的c ++来做.

最好的方法是什么?

谢谢.

c++ file-io

0
推荐指数
1
解决办法
315
查看次数

函数`feof`始终返回1

我正在尝试读取大小为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)

c c++ file-io feof visual-studio-2015

0
推荐指数
1
解决办法
201
查看次数

如何组合一组文本文件,而不是每个文件的第一行?

作为正常工作流程的一部分,我收到一组文本文件,每个文件包含一个标题行.对于我来说,将它们作为单个文件使用会更方便,但如果我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)

bash shell file-io

0
推荐指数
1
解决办法
102
查看次数

加速USB驱动器上的文件复制

我有一个具有以下文件夹结构的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分钟.有没有办法加快这个操作?我希望有一些超级聪明的方法来重命名文件夹/操纵分配表/无论如何使这种情况发生.

笔记:

  • 输入和最终重新排列的输出需要在USB驱动器上 - 这是一个sneakernet设置.
  • USB驱动器为FAT32或NTFS,大小为4GB.我们尝试过USB 3.0而速度没有提高.

c# windows file-io

0
推荐指数
1
解决办法
103
查看次数

使用try-finally块处理输入流有什么好处?

这是我在网上找到的一个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)

java file-io inputstream try-finally

0
推荐指数
1
解决办法
377
查看次数

每行读取一行,并使用fgets()和sscanf()将字符串评估为坐标

我正在尝试使用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.我也遇到了问题,因为我无法在互联网上找到每行扫描不同数量元素的内容.

c file-io scanf point-in-polygon

0
推荐指数
1
解决办法
216
查看次数

C程序fscanf跳过行

该程序接受一个文件,并且应该将文件内容传输到结构

该文件的内容是:

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)

c file-io struct scanf

0
推荐指数
1
解决办法
339
查看次数

Java:在Byte Stream中循环

有人可以解释为什么循环检查条件是否不同于-1?

while ((c = in.read()) != -1) {
    out.write(c);
}
Run Code Online (Sandbox Code Playgroud)

java file-io while-loop

0
推荐指数
1
解决办法
804
查看次数

如何从忽略空格的文件中读取数据?

我有这个程序用于从文件中读取数据:

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)

有人能给我一些暗示我应该做什么吗?

c file-io scanf

0
推荐指数
1
解决办法
74
查看次数

为什么从我的文件中读取的最小数字始终为0?(JAVA)

当我运行程序时,最小的数字总是为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)

java random file-io file

0
推荐指数
1
解决办法
52
查看次数