Форум программистов, компьютерный форум CyberForum.ru
Наши страницы

Fopen не видит путь к файлу - C++

Войти
Регистрация
Восстановить пароль
Другие темы раздела
C++ Почему visual studio 2008 не видит директиву #include <iostream> http://www.cyberforum.ru/cpp-beginners/thread1242200.html
Здравствуйте! Помогите пожалуйста с решением проблемы. Проблема стоит в том что мой компилятор не видит #include <iostream> и требует ввести "stdafx.h" но если я ее ввожу то у меня перестает видить...
C++ Для каждой открывающей скобки найти позицию ей соответствующей закрывающей скобки Доброго времени суток. Подскажите пожалуйста алгоритм или путь к решению задачи, используя СТЕК Дана ПСП, ваша задача для каждой открывающей скобочки найти позицию ей соответствующей закрывающей... http://www.cyberforum.ru/cpp-beginners/thread1242179.html
Корректно ли использовать goto? C++
Читал что оператор goto вообще советуют не использовать, кроме разве что глубоких циклов. Но нормально ли это будет, например, вот в таком коде: int main() { char choice; cin >> choice; while...
C++ Найти медианы на всех префиксах последовательности X длины n и вывести их сумму
В этой задаче необходимо найти медианы на всех префиксах последовательности X длины n и вывести их сумму. Медианой последовательности из нечетного (k = 2 ⋅ l + 1) количества элементов будем...
C++ Требуется идентификатор, исправить ошибки http://www.cyberforum.ru/cpp-beginners/thread1242149.html
Помогите, пожалуйста, исправить ошибки. class rus_codecvt : public std::codecvt<char, char, std::mbstate_t> { protected: virtual result do_in(std::mbstate_t&, const char* from, const char*...
C++ Написать небольшую прогу, которая понимает изменился ли бинарный файл или нет Мне нужно написать небольшую прогу, которая понимает изменился ли бинарный файл или нет. #include <windows.h> #include <string> #include <iostream> #include <fstream> int main(int agrc,... подробнее

Показать сообщение отдельно
Warezovvv
9 / 9 / 2
Регистрация: 09.12.2012
Сообщений: 219

Fopen не видит путь к файлу - C++

13.08.2014, 20:38. Просмотров 1214. Ответов 9
Метки (Все метки)

C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
#include <stdio.h>
#include <iostream>
#include <fstream>
#include <string>
#include <vector>
#include <map>
 
typedef std::map<std::string, std::string> mapss;
 
// An unsigned char can store 1 Bytes (8bits) of data (0-255)
typedef unsigned char BYTE;
 
// Get the size of a file
long getFileSize(FILE *file);
//Get all files names
std::vector<std::string> getFiles(int argc, char** str);
std::string getFileBuf(const char* filePath);
bool isExist(mapss& files, std::string curFile);
mapss fillExistFiles(std::fstream &result);
bool isChanged(mapss& files, std::string curFile);
 
 
int main(int argc, char** argv)
{
    std::string resultPath;
    std::fstream result;
    result.open(resultPath);
    std::vector<std::string> files = getFiles(argc, argv); 
    mapss existFiles = fillExistFiles(result);
    if (existFiles.empty())
        std::cout<<"No History detected!"<<std::endl;
    result.close();
    
    for(auto file : files)
        if(isExist(existFiles,file))
            if(isChanged(existFiles,file))      
                std::cout<<file<<" ----> " << "not changed!"<<std::endl;
            else
                std::cout<<file<<" ----> " << "changed!"<<std::endl;
        else
        {
 
            result.open(resultPath,std::ios::app);
            result<<file<<" "<<getFileBuf(file.c_str());
            std::cout<<file<<" ----> "<< "added to history!"<<std::endl;
        }
    result.close(); 
    return 0;
}
 
std::string getFileBuf(const char* filePath)
{
    std::cout<<filePath;
    BYTE *fileBuf;          // Pointer to our buffered data
    FILE *file = NULL;      // File pointer
    // Open the file in binary mode using the "rb" format string
    // This also checks if the file exists and/or can be opened for reading correctly
    if (([COLOR="red"]file = fopen(filePath, "rb")) == NULL[/COLOR]) {
        std::cout << "Could not open specified file" << std::endl;
        exit(-1);
    }
 
    // Get the size of the file in bytes
    long fileSize = getFileSize(file);
 
    // Allocate space in the buffer for the whole file
    fileBuf = new BYTE[fileSize];
 
    // Read the file in to the buffer
    fread(fileBuf, fileSize, 1, file);
 
    // Now that we have the entire file buffered, we can take a look at some binary infomation
    // Lets take a look in hexadecimal
    char hexstr[201];
    int i;
    for (i = 0; i < 100; i++)
        sprintf(hexstr+i*2, "%02x", fileBuf[i]);
    //printf("%X ", fileBuf[i]);
    hexstr[i*2] = 0;
 
    return hexstr;
}
 
long getFileSize(FILE *file)
{
    long lCurPos, lEndPos;
    lCurPos = ftell(file);
    fseek(file, 0, 2);
    lEndPos = ftell(file);
    fseek(file, lCurPos, 0);
    return lEndPos;
}
 
std::vector<std::string> getFiles(int argc, char** str)
{
    std::string s;
    for(int i = 1; i < argc; i++)
        s += str[i];
    std::string delimiter = ",";
    std::vector<std::string> files;
    size_t pos = 0;
    while ((pos = s.find(delimiter)) != std::string::npos) {
        std::string token = s.substr(0, pos);
        files.push_back(token);
        s.erase(0, pos + delimiter.length());
    }
    files.push_back(s.c_str());
    return files;
}
 
mapss fillExistFiles(std::fstream &result) 
{
    mapss existFiles;
    std::string str;
    while(true) {   
        if(!result.eof())
        {
            getline(result, str);
            if(str == "")
                break;
            size_t pos = 0;
            std::string delimiter = " ";            
            pos = str.find(delimiter);
            std::string name = str.substr(0, pos);
            str.erase(0, pos + delimiter.length());
            pos = str.find(delimiter);
            std::string hex = str.substr(0, pos);
            existFiles.insert(std::pair<std::string,std::string>(name,hex));
        }           
        else
            break;
    }
    return existFiles;
}
 
bool isExist(mapss& files, std::string curFile)
{
    mapss::const_iterator it = files.find(curFile);
    return it!=files.end();
}
 
bool isChanged(mapss& files, std::string curFile) 
{
    mapss::const_iterator it = files.find(curFile);
 
    return !getFileBuf(curFile.c_str()).compare(it->second); //if similar, return false (logic)
}
В функции getFileBuf в пятьдесят первой строке подчеркнуто то место, в которое передается путь файла, но fopen вообще ее не видит. Передаю типа C:\\hello\\add.txt. Если запихаю это в стринг, инициализрованный рядом, все прекрасно видит. в чем проблема.
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
 
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2017, vBulletin Solutions, Inc.
Рейтинг@Mail.ru