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

Почему БЕЗОШИБОЧНО создаётся файл, а его не видно? - C++

Восстановить пароль Регистрация
Другие темы раздела
C++ Транспонирование матрицы с использованием указателей http://www.cyberforum.ru/cpp-beginners/thread279071.html
Задание: Из матрицы X (mxn) построить матрицу Y, поменяв местами строки и столбцы. Использовать указатели. Помогите, второй день не могу освоить указатели. А завтра сдавать работу...
C++ Лаба по программированию Известен вещественный знакопеременный двумерный массив K=(Kij), i=1,2,..5, j=1,2,..7 Вычислить разность между максимальными и минимальными по модулю элементами массива. Вывести на экран полученную разность между указанными элементами и их индексами. Значения исходного массива задать самостоятельно от 0 до 50. Люди добрые помогите прогу написать плз а и ещё программа должна быть написана... http://www.cyberforum.ru/cpp-beginners/thread279057.html
Подсчитать наибольшее количество подряд идущих пробелов в тексте C++
С помощью текстового редактора БЛОКНОТ создать файл, содержащий текст, длина которого не превышает 700 символов (длина строки текста не должна превышать 70 символов). Файл должен иметь расширение DAT. Написать программу, которая: − выводит текст на экран дисплея; − определяет наибольшее количество подряд идущих пробелов в тексте. Вот нарыл на форумах что- то, переделал,...
C++ Обработка структур данных
Здравствуйте.никак не могу понять задачу. подскажите решение. в голову ничего не лезит. (задача на языке СИ) вот условие: Сведения о читателях библиотеки состоят из фамилии, имени, адреса читателя, названия книг, и цены. а) вывести списоок читателей, которые взяли одинаковые книги. б) найти названия книгг, цена которых превышает 200 рубл. И вывести список читателей, взявших эти книги....
C++ произведение элементов в каждом столбце с нечетным индексом http://www.cyberforum.ru/cpp-beginners/thread279049.html
Доброго времени суток форумчане. Прошу помощи в решении вот этой задачки: 1.Найти произведение элементов в каждом столбце с нечетным индексом и создать из них одномерный массив. Буду очень благодарен =)
C++ Узнать с какими ключами может запускаться программа при компилировании через командную строку нужно вводить всякие параметры, типо gcc -o file.exe file.c мне надо изъять подобную команду для компиляции проекта из MVS есть наверняка какой-нить файл, где хранится эта строка с командой может кто знает где такой файл или как его получить? подробнее

Показать сообщение отдельно
kravam
быдлокодер
 Аватар для kravam
1512 / 872 / 44
Регистрация: 04.06.2008
Сообщений: 5,265
19.04.2011, 14:45  [ТС]     Почему БЕЗОШИБОЧНО создаётся файл, а его не видно?
Всё-ж таки, ребята, я чуть-чуть разобрался.

Короче, с tmpnam всё ясно более или менее. Еле-еле в MSND нашёл нужные строки:
"This program uses tmpnam to create a unique filename in the
// current working directory"
То есть tmpnam создаёт имена файла, уникальные в ТЕКУЩЕЙ рабочей директории.
В принципе всё, но если бы кто разъяснил, был бы благодарен на счёт _tempnam

Код взят по ссылке
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
// crt_tempnam.c
// compile with: /W3
// This program uses tmpnam to create a unique filename in the
// current working directory, then uses _tempnam to create 
// a unique filename with a prefix of stq. 
 
#include <stdio.h>
#include <stdlib.h>
 
int main( void )
{   
   char* name1 = NULL;
   char* name2 = NULL;
 
   // Create a temporary filename for the current working directory: 
   if( ( name1 = tmpnam( NULL ) ) != NULL ) // C4996
   // Note: tmpnam is deprecated; consider using tmpnam_s instead
      printf( "%s is safe to use as a temporary file.\n", name1 );
   else
      printf( "Cannot create a unique filename\n" );
 
   // Create a temporary filename in temporary directory with the
   // prefix "stq". The actual destination directory may vary
   // depending on the state of the TMP environment variable and
   // the global variable P_tmpdir.   
 
   if( ( name2 = _tempnam( "c:\\tmp", "stq" ) ) != NULL )
      printf( "%s is safe to use as a temporary file.\n", name2 ); 
   else
      printf( "Cannot create a unique filename\n" );
 
   // When name2 is no longer needed :   
   if(name2)
     free(name2);
     
}
Ну тут на самом деле всё понятно, кроме одного, почему
_tempnam

рассматривает директорию c\\temp, а имя файла выдаёт какое-то левое причём результат
этот предсказуемый, вот он там же напечатан:

C:\DOCUME~1\user\LOCALS~1\Temp\2\stq2
А по идее должно быть что-то типа C\tmp\<std_конец_имени_файла>

Добавлено через 1 час 19 минут
Хотя нет, ребята, они написали в MSND ложь. Вот эту ложь:
// This program uses tmpnam to create a unique filename in the
// current working directory

Проведём эксперимент. Накропаем код:
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
#include <stdio.h>
#include <stdlib.h>
 
int main( void )
{   
   char* name1 = NULL;
   char* name2 = NULL;
 
   // Create a temporary filename for the current working directory: 
   if( ( name1 = tmpnam( NULL ) ) != NULL ) // C4996
   // Note: tmpnam is deprecated; consider using tmpnam_s instead
      printf( "%s is safe to use as a temporary file.\n", name1 );
   else
      printf( "Cannot create a unique filename\n" );
   if( ( name1 = tmpnam( NULL ) ) != NULL ) // C4996
   // Note: tmpnam is deprecated; consider using tmpnam_s instead
      printf( "%s is safe to use as a temporary file.\n", name1 );
   else
      printf( "Cannot create a unique filename\n" );
   if( ( name1 = tmpnam( NULL ) ) != NULL ) // C4996
   // Note: tmpnam is deprecated; consider using tmpnam_s instead
      printf( "%s is safe to use as a temporary file.\n", name1 );
   else
      printf( "Cannot create a unique filename\n" );
   if( ( name1 = tmpnam( NULL ) ) != NULL ) // C4996
   // Note: tmpnam is deprecated; consider using tmpnam_s instead
      printf( "%s is safe to use as a temporary file.\n", name1 );
   else
      printf( "Cannot create a unique filename\n" );
   if( ( name1 = tmpnam( NULL ) ) != NULL ) // C4996
   // Note: tmpnam is deprecated; consider using tmpnam_s instead
      printf( "%s is safe to use as a temporary file.\n", name1 );
   else
      printf( "Cannot create a unique filename\n" );
   if( ( name1 = tmpnam( NULL ) ) != NULL ) // C4996
   // Note: tmpnam is deprecated; consider using tmpnam_s instead
      printf( "%s is safe to use as a temporary file.\n", name1 );
   else
      printf( "Cannot create a unique filename\n" );
   if( ( name1 = tmpnam( NULL ) ) != NULL ) // C4996
   // Note: tmpnam is deprecated; consider using tmpnam_s instead
      printf( "%s is safe to use as a temporary file.\n", name1 );
   else
      printf( "Cannot create a unique filename\n" );
   if( ( name1 = tmpnam( NULL ) ) != NULL ) // C4996
   // Note: tmpnam is deprecated; consider using tmpnam_s instead
      printf( "%s is safe to use as a temporary file.\n", name1 );
   else
      printf( "Cannot create a unique filename\n" );
   if( ( name1 = tmpnam( NULL ) ) != NULL ) // C4996
   // Note: tmpnam is deprecated; consider using tmpnam_s instead
      printf( "%s is safe to use as a temporary file.\n", name1 );
   else
      printf( "Cannot create a unique filename\n" );
   getchar ();
   if( ( name1 = tmpnam( NULL ) ) != NULL ) // C4996
   // Note: tmpnam is deprecated; consider using tmpnam_s instead
      printf( "%s is safe to use as a temporary file.\n", name1 );
   else
      printf( "Cannot create a unique filename\n" );
   if( ( name1 = tmpnam( NULL ) ) != NULL ) // C4996
   // Note: tmpnam is deprecated; consider using tmpnam_s instead
      printf( "%s is safe to use as a temporary file.\n", name1 );
   else
      printf( "Cannot create a unique filename\n" );
   if( ( name1 = tmpnam( NULL ) ) != NULL ) // C4996
   // Note: tmpnam is deprecated; consider using tmpnam_s instead
      printf( "%s is safe to use as a temporary file.\n", name1 );
   else
      printf( "Cannot create a unique filename\n" );
   if( ( name1 = tmpnam( NULL ) ) != NULL ) // C4996
   // Note: tmpnam is deprecated; consider using tmpnam_s instead
      printf( "%s is safe to use as a temporary file.\n", name1 );
   else
      printf( "Cannot create a unique filename\n" );
   if( ( name1 = tmpnam( NULL ) ) != NULL ) // C4996
   // Note: tmpnam is deprecated; consider using tmpnam_s instead
      printf( "%s is safe to use as a temporary file.\n", name1 );
   else
      printf( "Cannot create a unique filename\n" );
   if( ( name1 = tmpnam( NULL ) ) != NULL ) // C4996
   // Note: tmpnam is deprecated; consider using tmpnam_s instead
      printf( "%s is safe to use as a temporary file.\n", name1 );
   else
      printf( "Cannot create a unique filename\n" );
   if( ( name1 = tmpnam( NULL ) ) != NULL ) // C4996
   // Note: tmpnam is deprecated; consider using tmpnam_s instead
      printf( "%s is safe to use as a temporary file.\n", name1 );
   else
      printf( "Cannot create a unique filename\n" );
   if( ( name1 = tmpnam( NULL ) ) != NULL ) // C4996
   // Note: tmpnam is deprecated; consider using tmpnam_s instead
      printf( "%s is safe to use as a temporary file.\n", name1 );
   else
      printf( "Cannot create a unique filename\n" );
   if( ( name1 = tmpnam( NULL ) ) != NULL ) // C4996
   // Note: tmpnam is deprecated; consider using tmpnam_s instead
      printf( "%s is safe to use as a temporary file.\n", name1 );
   else
      printf( "Cannot create a unique filename\n" );
 
 
     
   getchar ();
}
Ну то есть попробуем использовать tmpnam много раз. Запустим код и увидим, к примеру такое:

PureBasic
1
2
3
4
5
6
7
8
9
\s36s. is safe to use as a temporary file.
\s36s.1 is safe to use as a temporary file.
\s36s.2 is safe to use as a temporary file.
\s36s.3 is safe to use as a temporary file.
\s36s.4 is safe to use as a temporary file.
\s36s.5 is safe to use as a temporary file.
\s36s.6 is safe to use as a temporary file.
\s36s.7 is safe to use as a temporary file.
\s36s.8 is safe to use as a temporary file.
OK, теперь залезем в текущюю папку файл и создадим там файл s36s.9 После этого жмём на Enter и видим:
И увидим:

\s36s.9 is safe to use as a temporary file.
...
...
...

Видите? Имя файла s36s.9 сгенерировалось, хотя файл s36s.9 в текущей директории есть!
И вот так много-много раз повторим и всякий раз будет генериться имя ИМЕЮЩЕГОСЯ уже файла

А вот если мы будем создавать файл в директории диска, тогда, всё будет ОК и имя s36s.9 создаваться не будет, а будут создаваться имена:
Bash
1
2
\s36s.a is safe to use as a temporary file.
\s36s.b is safe to use as a temporary file.
Вывод: а безо всяких выводов. От чего начал к тому и пришёл, только в правильности официальных доков усомнился и всё.
 
Текущее время: 09:12. Часовой пояс GMT +3.
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2016, vBulletin Solutions, Inc.
Рейтинг@Mail.ru